如何解决Perl:调试未初始化的s ///?
| 我在查找程序问题时遇到了一些麻烦。得到错误:Use of uninitialized value in substitution (s///)
我知道这已经被问过了,但这并没有帮助我。我意识到ѭ1可能会统一,但是我想知道你们是否可以帮助我找出原因?
这是代码的问题部分:
$one_match_ref->{\'sentence\'} = $1 if ($line =~ /^Parsing \\[sent. \\d+ len. \\d+\\]: \\[(.+)\\]/);
$one_match_ref->{\'sentence\'} =~ s/,/ /g;
编辑:我已经这样声明了$one_match_ref->{\'sentence\'}
:
my $sentence;
$one_match_ref = {
chapternumber => $chapternumber_value,sentencenumber => $sentencenumber_value,sentence => $sentence,##Get from parsed text: remove commas
grammar_relation => $grammar_relation_value,##Get from parsed text: split?
arg1 => $argument1,##Get from parsed text: first_dependencyword
arg2 => $argument2 ##Get from parsed text: second_dependencyword
};
但是这些变量都没有分配任何东西。
我的尝试:
答:如果我在s ///后面加上ѭ5,,它将起作用。但这很麻烦,并且似乎是在避免问题而不是解决问题。
我上次使用该修复程序是因为我的循环出现了“ off-by-one \”错误,所以我认为这次并非如此。
B.如果我声明:my $sentence = \'\';
打印,但中间有很多空白行。如何消除这些?
编辑:出于兴趣和效率的目的:使用split获得我想要的东西更好吗?
在此先感谢您的帮助或建议。让我知道您是否需要文件格式的示例。
解决方法
您的代码归结为
my $sentence;
$one_match_ref = { sentence => $sentence };
() if ($line =~ /^Parsing \\[sent. \\d+ len. \\d+\\]: \\[(.+)\\]/);
$one_match_ref->{\'sentence\'} =~ s/,/ /g;
您将undef
分配给$one_match_ref->{\'sentence\'}
,然后尝试从其中删除逗号。那没有任何意义,因此是警告。
也许你想要
my $sentence;
$one_match_ref = { sentence => $sentence };
if ($line =~ /^Parsing \\[sent. \\d+ len. \\d+\\]: \\[(.+)\\]/) {
$one_match_ref->{\'sentence\'} = $1;
$one_match_ref->{\'sentence\'} =~ s/,/ /g;
}
, 我不确定这里未初始化的是$1
,而是$one_match_ref->{\'sentence\'}
。
仅当行与正则表达式匹配时,才设置该值。否则,它根本不会被触及。
我的理由是,它在替补而不是分配期间抱怨。您可以通过将$one_match_ref->{\'sentence\'}
设置为这两行之前的已知值(例如空字符串)来解决此问题。
但这取决于您实际使用这些值的目的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。