在 Perl 的 if 语句中为变量赋值
Assigning value to a variable in if statement in Perl
我在尝试为 if
语句中的变量赋新值时收到警告 Use of ininitialized value in regexp compilation
。为什么会出现此警告?
我的代码:
my $command;
if ($number == 1) {
$command = $ARGV[0];
} elsif ($number == 2) {
$command = $ARGV[1];
}
my @values = split(undef, $command); # error here
print "$values[0]\n";
输出:
Use of uninitialised value in regexp compilation at ./file.pl
例如,对于输入 i/3542/$
(仅作为一个参数),预期输出将只是 i
.
这与您的if
声明完全无关。我假设完整的错误信息告诉你问题出在线上:
my @values = split(undef, $command);
这是the documentation for the split()
command。它说该命令采用以下形式:
split /PATTERN/,EXPR,LIMIT
split /PATTERN/,EXPR
split /PATTERN/
split
您在这里使用的是第二个选项 - 该函数采用两个参数,一个正则表达式(或“模式”)和一个字符串(或“expr”)。你的警告说“正则表达式编译中未初始化的值”,所以很明显问题出在第一个参数(正则表达式)上,而不是第二个参数。
使用 undef
作为正则表达式毫无意义。但是 Perl 会充分利用这种情况并将 undef
视为空字符串(在显示您看到的警告之后)。您可以通过将 undef
替换为真正的正则表达式来删除警告 - 一个只包含空字符串的正则表达式。
my @values = split(//, $command);
注意: split()
通常会接受一个字符串作为它的第一个参数,并默默地将它转换为正则表达式。我发现如果你总是在这里明确使用正则表达式,它会更自我记录 - 这就是为什么我使用 split(//, ...)
而不是一些评论中建议的 split('', ...)
。
我在尝试为 if
语句中的变量赋新值时收到警告 Use of ininitialized value in regexp compilation
。为什么会出现此警告?
我的代码:
my $command;
if ($number == 1) {
$command = $ARGV[0];
} elsif ($number == 2) {
$command = $ARGV[1];
}
my @values = split(undef, $command); # error here
print "$values[0]\n";
输出:
Use of uninitialised value in regexp compilation at ./file.pl
例如,对于输入 i/3542/$
(仅作为一个参数),预期输出将只是 i
.
这与您的if
声明完全无关。我假设完整的错误信息告诉你问题出在线上:
my @values = split(undef, $command);
这是the documentation for the split()
command。它说该命令采用以下形式:
split /PATTERN/,EXPR,LIMIT
split /PATTERN/,EXPR
split /PATTERN/
split
您在这里使用的是第二个选项 - 该函数采用两个参数,一个正则表达式(或“模式”)和一个字符串(或“expr”)。你的警告说“正则表达式编译中未初始化的值”,所以很明显问题出在第一个参数(正则表达式)上,而不是第二个参数。
使用 undef
作为正则表达式毫无意义。但是 Perl 会充分利用这种情况并将 undef
视为空字符串(在显示您看到的警告之后)。您可以通过将 undef
替换为真正的正则表达式来删除警告 - 一个只包含空字符串的正则表达式。
my @values = split(//, $command);
注意: split()
通常会接受一个字符串作为它的第一个参数,并默默地将它转换为正则表达式。我发现如果你总是在这里明确使用正则表达式,它会更自我记录 - 这就是为什么我使用 split(//, ...)
而不是一些评论中建议的 split('', ...)
。