значение хэш-пары perl в строке - PullRequest
2 голосов
/ 24 мая 2011

Я пытаюсь понять, как отправить значение в $ 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 ]

3 голосов
/ 24 мая 2011

Подпрограмма всегда получает массив - даже если он содержит один параметр

1 голос
/ 24 мая 2011

Согласно perlvar [http://perldoc.perl.org/perlvar.html]:

Внутри подпрограммы массив @_ содержит параметры, переданные этой подпрограмме.

и perlsub [http://perldoc.perl.org/perlsub.html]:

Любые переданные аргументы отображаются в массиве @_. Следовательно, если вы вызываете функцию с двумя аргументами, они будут храниться в $ [0] и $ [1]. Массив @_ является локальным массивом, но его элементы являются псевдонимами для фактических скалярных параметров. В частности, если обновляется элемент $ [0], обновляется соответствующий аргумент (или возникает ошибка, если его нельзя обновить). Если аргумент является элементом массива или хеша, который не существовал при вызове функции, этот элемент создается только тогда, когда (и если) он был изменен или была взята ссылка на него. (Некоторые более ранние версии Perl создавали элемент независимо от того, был ли ему присвоен элемент.) Присвоение целому массиву @ удаляет этот псевдоним и не обновляет никаких аргументов.

@ _ определенно является массивом:)

1 голос
/ 24 мая 2011

@ _ на самом деле не массив (обычно - он временно становится реальным, если вы обращаетесь к нему), он просто обеспечивает синтаксис для доступа к параметрам, совместимым с другим синтаксисом perl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...