这是一个子程序,用于获取单词的过去分词。动词被传入,分成字符,然后根据最后的字母,选择结尾:
##Past Participle
sub getPPForBase(){ ##$verb passed in
my $verb = shift;
my @verbChars = split(//,$verb); ##Split into characters
my $verbLen = @verbChars; ##Length of @verbchars, as a number
###PROBLEM HERE:: trying to say last letter is e, second last is i
if(($verbChars[$verbLen -1] eq "e") && ($verbChars[$verLen -2] eq "i")){
return substr($verb,0,$verbLen-2)."ying";
}
if($verbChars[$verbLen -1] eq "e"){
return substr($verb,0,$verbLen-1)."ing";
}
return $verb."ing";
}
错误:
[Thu Jun 23 13:47:51 2011] [error] [client ::1] Use of uninitialized value $verLen in subtraction (-) at /Users/jon/Desktop/stanford-postagger-full-2011-04-20/verbTenseChanger.pl line 59.
有人可以帮我弄清楚这意味着什么,以及如何解决它? (代码运行正常,但我担心存在隐藏的问题。)
如果您需要更多信息,请与我们联系。
非常感谢。
答案 0 :(得分:3)
正如其他人所指出的,你有一个错字导致你的问题。如果您使用过:
,这不会成为问题use strict;
use warnings;
哪一个总应该。那样做。
此外,这是您当前子代码的替代选择:
sub getPPForBase {
my $verb = shift;
return $verb . "ying" if $verb =~ s/ie$//;
return $verb . "ing" if $verb =~ s/e$//;
return $verb . "ing";
}
在这种情况下,使用正则表达式,我认为是一个更受欢迎的解决方案,因为它更容易阅读。此外,当这样放置时,在需要时更容易添加或删除条件,而不是尝试整理所有if子句。
答案 1 :(得分:2)
这意味着你拼写错误的verbLen为verLen。
答案 2 :(得分:2)
我的 $ verbLen
...
$ verbChars [ $ verLen -2]
其中一件事与其他事情不一样......