Perl抱怨正则表达式中的未初始化值
我有一个功能如下:Perl抱怨正则表达式中的未初始化值,perl,Perl,我有一个功能如下: sub getMinFromParam { my ($param) = @_; print "PPPP = $param\n"; my $min; if ($param =~ /\s*\[(\S+),\s*(\S+)\]\s*/) { print "IN HERE\n"; $min = $1; } elsif ($min =~ /((\w+),)+/) { my @tmp = spli
sub getMinFromParam {
my ($param) = @_;
print "PPPP = $param\n";
my $min;
if ($param =~ /\s*\[(\S+),\s*(\S+)\]\s*/) {
print "IN HERE\n";
$min = $1;
}
elsif ($min =~ /((\w+),)+/) {
my @tmp = split (/\s*,\s*/, $param);
if ($tmp[0] =~ /\[(\w+),\s?(\w+)\]/) {
$min = $1;
}
else {
$min = $tmp[0];
}
}
return ($min);
}
当$param是一个类似于:120u、421u、53、19、41u、53的字符串时,
我得到一个错误:在这一行的模式匹配(m/)中使用未初始化的值:
if ($param =~ /\s*\[(\S+),\s*(\S+)\]\s*/) {
elsif ($min =~ /((\w+),)+/) {
为什么定义$param时它会抱怨未初始化的值?不是。它在抱怨这句话:
if ($param =~ /\s*\[(\S+),\s*(\S+)\]\s*/) {
elsif ($min =~ /((\w+),)+/) {
至少这里有测试数据120u、421u、53、19、41u、53
这是预期的,因为$min
仅在$param
匹配时设置,而elsif
仅在$param
不匹配时运行
该行可能应该是
elsif($param=~/(\w+)+/){
,在这种情况下,我没有收到警告。不是。它抱怨这行:
if ($param =~ /\s*\[(\S+),\s*(\S+)\]\s*/) {
elsif ($min =~ /((\w+),)+/) {
至少这里有测试数据120u、421u、53、19、41u、53
这是预期的,因为$min
仅在$param
匹配时设置,而elsif
仅在$param
不匹配时运行
该行可能应该是
elsif($param=~/(\w+)+/){
,在这种情况下,我不会得到警告。实际上是$min
未定义,当您使用严格和警告时会报告它。这修复了它:
use strict;
use warnings;
sub getMinFromParam
{
my ($param) = @_;
print "PPPP = $param\n";
my $min;
if ($param =~ /\s*\[(\S+),\s*(\S+)\]\s*/)
{
print "IN HERE\n";
$min = $1;
}
elsif (defined $min && $min =~ /((\w+),)+/)
{
my @tmp = split (/\s*,\s*/, $param);
if ($tmp[0] =~ /\[(\w+),\s?(\w+)\]/)
{
$min = $1;
}
else
{
$min = $tmp[0];
}
}
return ($min);
}
getMinFromParam "120u, 421u, 53, 19, 41u, 53"
它实际上是未定义的$min
,当您使用严格的和警告时会报告它。这修复了它:
use strict;
use warnings;
sub getMinFromParam
{
my ($param) = @_;
print "PPPP = $param\n";
my $min;
if ($param =~ /\s*\[(\S+),\s*(\S+)\]\s*/)
{
print "IN HERE\n";
$min = $1;
}
elsif (defined $min && $min =~ /((\w+),)+/)
{
my @tmp = split (/\s*,\s*/, $param);
if ($tmp[0] =~ /\[(\w+),\s?(\w+)\]/)
{
$min = $1;
}
else
{
$min = $tmp[0];
}
}
return ($min);
}
getMinFromParam "120u, 421u, 53, 19, 41u, 53"
我刚刚意识到同样的问题…但是我不明白…为什么Perl解释器会抱怨“if”而不是“elsif”这实际上是造成问题的原因。我的代码顶部也有使用警告。@AlvinHo:我不是通灵者。但是,在我的系统上,错误消息包括正确的行号以及在模式匹配(m/)中使用未初始化值$min的相关语句在./test.pl第16行。
现在我猜您可能会因为here文档、一种或一种特殊的启动脚本的方式(不直接在源文件上按原样(?).Oh和linecontinuation字符(在here文档中?)@阿尔文,首先,没有所谓的elsif
语句。其次,if
在很多年前就已经被特殊处理过了,可以在中途发出警告。升级你的Perl。@ikegami:谢谢你提出了可能的现实生活解释:)这本应该已经读过了“没有所谓的elsif
语句,所以不能说警告不是来自if
”我刚刚意识到了同样的问题……但我不明白……为什么Perl解释器会抱怨“if”而不是“elsif”“这实际上是造成问题的原因。我的代码顶部也有使用警告。@AlvinHo:我不是通灵者。但是,在我的系统上,错误消息包括正确的行号以及在模式匹配(m/)中使用未初始化值$min的相关语句在./test.pl第16行。
现在我猜您可能会因为here文档、一种或一种特殊的启动脚本的方式(不直接在源文件上按原样(?).Oh和linecontinuation字符(在here文档中?)@阿尔文,首先,没有所谓的elsif
语句。其次,if
在很多年前就已经被特殊处理过了,可以在中途发出警告。升级你的Perl。@ikegami:谢谢你提出了可能的现实生活解释:)这本应该已经读过了没有elsif
语句,因此不能说警告不是来自if