Как я могу разобрать аргументы командной строки? - PullRequest
3 голосов
/ 20 октября 2010

Я хочу проанализировать список аргументов в скрипте Perl, например, у меня такая ситуация:

script.pl -h 127.0.0.1 -u user -p pass arg1 arg2 arg3

Как мне сделать для анализа списка аргументов, которые не являются опцией в массиве, а параметр option в скалярном значении?

Спасибо.

Ответы [ 2 ]

12 голосов
/ 20 октября 2010

Аргументы вашей программы хранятся в @ARGV.

Если вы хотите вообще работать с переключателями, используйте Getopt::Long, который является стандартным модулем Perl.

Даже если вы думаете: «О, я могу просто выбрать то, что хочу из списка», пожалуйста, используйте Getopt::Long, потому что я гарантирую вам, что придет время, когда вы добавите больше переключателей, и вы закончите говоря "Чувак, я бы хотел с самого начала использовать Getopt :: Long."

Пожалуйста, смотрите также мой блог "Используйте Getopt :: Long, даже если вы думаете, что он вам не нужен" .

11 голосов
/ 20 октября 2010

Ну, если они являются единственными в командной строке, которые не указаны в качестве параметров, то они все равно должны быть в @ARGV.Так что просто используйте @ARGV.

use Getopt::Long;

# save arguments following -h or --host in the scalar $host
# the '=s' means that an argument follows the option
# they can follow by a space or '=' ( --host=127.0.0.1 )
GetOptions( 'host=s' => \my $host 
          , 'user=s' => \my $user  # same for --user or -u
          , 'pass=s' => \my $pass  # same for --pass or -p
          );

# @ARGV: [ qw<arg1 arg2 arg3> ]

см. Getopt::Long

...