我的代码:
我的$ aaa =“abc”;sub myp { 打印“$ _”;}MYP($ AAA);我希望myp可以打印它得到的论点。但它说在./arg第17行的字符串中使用未初始化的值$ _。
Perl中子例程的参数在。中传递 @_ 阵列。这和。不一样 $_ 变量。
@_
$_
一个常见的习语是在函数的第一行中“解包”这些参数,例如
sub example { my ($arg1, $arg2) = @_; print "$arg1 and $arg2"; }
它也可以直接引用参数作为元素 @_ ,例如如 $_[0] ,但这更难以阅读,因此最好避免。
$_[0]
我经常这样做:
my $first_arg = shift @_; my $second_arg = shift @_;
您还可以使用其他响应的方法:
my ($first_arg, $second_arg) = @_;
但要小心说:
my $first_arg = @_;
因为您将获得传递给子例程的参数数量。
当你提到 $_ 您正在引用默认的字符串变量,在这种情况下您可能希望引用 @_ 如果你想得到一个特定的论点,你必须说 $_[narg] ,如果你这样做,也要小心地将数组传递给子程序:
$_[narg]
some_sub(@myarray);
您将传递整个数组,因为它是参数列表,而您应该说:
some_sub(\@myarray);