我有以下功能:
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*/) {
为什么在定义$ param时抱怨未初始化的值?
答案 0 :(得分:1)
不是。它抱怨这条线:
elsif ($min =~ /((\w+),)+/) {
至少这里有测试数据120u, 421u, 53, 19, 41u, 53
这是预期的,因为$min
仅在$param
匹配时设置,但elsif
仅在$param
不匹配时运行。
该行可能应该是elsif ($param =~ /((\w+),)+/) {
,在这种情况下我不会收到警告。
答案 1 :(得分:0)
实际上$min
未定义,并在您使用strict
和warnings
时报告。这解决了它:
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"