Perl: как я могу передать список в скрипт? - PullRequest
4 голосов
/ 04 января 2012

мне нужно передать список в мой скрипт, как я могу это сделать?

например, у меня есть скрипт: flow.pl мне нужно передать ему список fubs:

fub1, fub2, fub3 

и путь к базе данных1 =

path1 

и путь к базе данных2 =

path2 

и как я могу получить эти параметры?

 (through $ARGV[i]?)

, если я это сделаю:

flow.pl fub1,fub2,fub3 path1 path2

и в коде:

$listoffubs = $ARGV[0]
$path1 = $ARGV[1]
$path2 = $ARGV[2]

список fubs получает имя fubs как одно слово.

Ответы [ 3 ]

7 голосов
/ 04 января 2012

Наличие списков позиционных аргументов в порядке, если списки короткие и простые.Как только вы получите большее количество аргументов или у вас есть аргументы с внутренней структурой, вы, вероятно, захотите взглянуть на именованные аргументы.

В этом случае, я думаю, я бы посмотрел на использование GetOpt :: Long для реализации именованных аргументов.

5 голосов
/ 04 января 2012

Просто разделите список:

my @ListOfFubs = split /,/ ,  $listoffubs;
1 голос
/ 04 января 2012

Ваши аргументы будут разделены пробелами, поэтому да, fub1,fub2,fub3 будет одним аргументом. Просто используйте вместо этого пробел, и все будет в порядке. E.g.:

flow.pl fub1 fub2 fub3 path1 path2

my $fub1 = shift;     # first argument is removed from ARGV and assigned to $fub1

Или

my $fub1 = $ARGV[0];  # simple assignment

Все сразу

my ($fub1,$fub2,$fub3,$path1,$path2) = @ARGV;  # all are assigned at once

Обратите внимание, что использование shift удаляет аргументы из @ARGV.

Если у вас есть список аргументов, которые могут отличаться, это просто исправить, чтобы поставить их последними, а затем сделать:

flow.pl path1 path2 fub1 fub2 fub3 ... fubn

my $path1 = shift;
my $path2 = shift;  # remove first two arguments, then
my @fubs  = @ARGV;  # assign the rest of the args to an array

Для более сложной обработки аргументов используйте модуль, такой как Getopt :: Long .

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