字符串中的Perl哈希对值
我试图计算如何将$ opt {p}中的值和直接字符串发送到子例程而不是数组。字符串中的Perl哈希对值
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";
子程序总是收到一个阵列 - 即使包含单个参数
@_是不是一个真正的阵列(通常是 - 如果你把它的一个引用它暂时变成了现实),它是只是为了提供访问与其他perl语法一致的参数的语法。
根据perlvar [http://perldoc.perl.org/perlvar.html]:
在一个子程序阵列@_包含传递到子程序的参数。
和perlsub [http://perldoc.perl.org/perlsub.html]:
在显示了阵列@_传入的任何参数。因此,如果您使用两个参数调用函数,那么这些函数将存储在$ [0]和$ [1]中。数组@_是一个本地数组,但其元素是实际标量参数的别名。特别是,如果更新元素$ [0],则会更新相应的参数(或者如果它不可更新,则会发生错误)。如果参数是调用函数时不存在的数组或哈希元素,则仅在修改了该元素(或如果)或对其进行了引用时才创建该元素。 (某些早期版本的Perl创建了该元素是否已分配给该元素。)分配给整个数组@将删除该别名,并且不更新任何参数。
@_绝对是一个数组:)
该文件希望你相信,是的......在这个问题的上下文中,它想知道如何在不创建数组的情况下传递参数,我认为值得说出真相,即没有创建单独的数组。 – ysth 2011-05-24 17:39:51
啊好的,谢谢。 – AndyM 2011-05-24 09:35:29