我试图计算如何将$ opt {p}中的值和直接字符串发送到子例程而不是数组。
use Getopt::Std;
my $opt_string = 'hdp:j:';
getopts( "$opt_string", \%opt ) or usage();
usage() if $opt{h};
}
sub usage()
{
print STDERR << "EOF";
This program grabs the problem print request and puts them in folder for investigation.
usage: $0 [-d] [-p printer] [-j job] -h : this (help) message
-p printer: problem printer
-j file : problem print job id
-d : print debugging messages to stderr
example: $0 -p PRINTERQ -j 76063 -d
EOF
exit;
}
sub find_printer
{
my $printer = $_[0] ;
print "Looking for printer $printer .. \n";
}
find_printer( $opt{p} ) or die "Unable to find printer";
答案 0 :(得分:3)
子程序总是接收一个数组 - 即使它包含一个参数
答案 1 :(得分:1)
@_实际上不是一个数组(通常 - 如果你引用它,它会暂时变为实数),它只是提供一种语法来访问与其他perl语法一致的参数。
答案 2 :(得分:1)
根据perlvar [http://perldoc.perl.org/perlvar.html]:
在子程序中,数组@_包含传递给该子程序的参数。
和perlsub [http://perldoc.perl.org/perlsub.html]:
传入的任何参数都显示在数组@_中。因此,如果您使用两个参数调用函数,那么这些参数将存储在$ [0]和$ [1]中。数组@_是一个本地数组,但它的元素是实际标量参数的别名。特别是,如果更新元素$ [0],则更新相应的参数(如果不可更新,则会发生错误)。如果参数是调用函数时不存在的数组或散列元素,则仅在修改它时(或者如果)修改该元素或者对其进行引用。 (Perl的某些早期版本创建了元素,无论元素是否已分配给。)分配给整个数组@ 会删除该别名,并且不会更新任何参数。
@_绝对是一个数组:)