Perl - 翻译变量的子程序
Perl - subroutine to translate variables
我写了下面的子程序:
sub MakeNan {
my $n = $_;
if ( $n !~ /^Positive|^Negative/ ) {
return "N/A";
}
else { return "$n"; }
}
我一直在以下上下文中调用它:
open ( FILE, $file);
while (<FILE>) {
chomp;
my @a = split("\t", $_);
my $hr = $a[55];
$hr = &MakeNan($hr);
print "$hr\n";
}
close FILE;
不幸的是,它 returns "N/A" 对于它给出的每个值,尽管事实上有许多值实例应该 return "Positive..." 或 "Negative..."
我不明白我每次都做子程序return "N/A"做错了什么。
有几个错误。 $n
不包含您的参数,因为默认变量不是您的参数。你的正则表达式是错误的。改为这样做:
sub make_nan {
my ($n) = @_; # or: my $n = shift;
return $n =~ /^(Positive|Negative)/ ? $n : 'N/A';
}
并在调用您的函数时删除 &
。
但是,您不需要子例程,因为您只需要一个三元运算符。
由于传递给子例程的项目是通过@_传递的,因此子 MakeNan 中的第一行应该是:
my $n = $_[0];
或者,由于有不止一种方法,您也可以在子例程的第一行中像这样对 $hr 进行标量引用。
my $hr_ref = $hr;
我写了下面的子程序:
sub MakeNan {
my $n = $_;
if ( $n !~ /^Positive|^Negative/ ) {
return "N/A";
}
else { return "$n"; }
}
我一直在以下上下文中调用它:
open ( FILE, $file);
while (<FILE>) {
chomp;
my @a = split("\t", $_);
my $hr = $a[55];
$hr = &MakeNan($hr);
print "$hr\n";
}
close FILE;
不幸的是,它 returns "N/A" 对于它给出的每个值,尽管事实上有许多值实例应该 return "Positive..." 或 "Negative..."
我不明白我每次都做子程序return "N/A"做错了什么。
有几个错误。 $n
不包含您的参数,因为默认变量不是您的参数。你的正则表达式是错误的。改为这样做:
sub make_nan {
my ($n) = @_; # or: my $n = shift;
return $n =~ /^(Positive|Negative)/ ? $n : 'N/A';
}
并在调用您的函数时删除 &
。
但是,您不需要子例程,因为您只需要一个三元运算符。
由于传递给子例程的项目是通过@_传递的,因此子 MakeNan 中的第一行应该是:
my $n = $_[0];
或者,由于有不止一种方法,您也可以在子例程的第一行中像这样对 $hr 进行标量引用。
my $hr_ref = $hr;