字符串中的perl哈希对值

时间:2011-05-24 09:19:28

标签: perl

我试图计算如何将$ 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";

3 个答案:

答案 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的某些早期版本创建了元素,无论元素是否已分配给。)分配给整个数组@ 会删除该别名,并且不会更新任何参数。

@_绝对是一个数组:)