Я работаю над сценарием Perl. Как передать ему параметры командной строки?
Пример:
script.pl "string1" "string2"
perl
command-line
Ламкро
источник
источник
./script.pl
иначе во время выполнения ничего не произойдет.Ответы:
Зависит от того, чем вы хотите заниматься. Если вы хотите использовать два аргумента в качестве входных файлов, вы можете просто передать их, а затем использовать
<>
для чтения их содержимого.Если они имеют другое значение, вы можете легко их использовать
GetOpt::Std
иGetOpt::Long
обрабатывать.GetOpt::Std
поддерживает только односимвольные переключатели иGetOpt::Long
намного более гибок. ОткудаGetOpt::Long
:use Getopt::Long; my $data = "file.dat"; my $length = 24; my $verbose; $result = GetOptions ("length=i" => \$length, # numeric "file=s" => \$data, # string "verbose" => \$verbose); # flag
Или
@ARGV
это специальная переменная, которая содержит все аргументы командной строки.$ARGV[0]
это первый (т.е."string1"
в вашем случае) и$ARGV[1]
второй аргумент. Для доступа не нужен специальный модуль@ARGV
.источник
Contains the name of the current file when reading from <> .
Вы передаете их, как вы думаете, и в своем скрипте вы получаете их из массива
@ARGV
. Вот так:my $numArgs = $#ARGV + 1; print "thanks, you gave me $numArgs command-line arguments.\n"; foreach my $argnum (0 .. $#ARGV) { print "$ARGV[$argnum]\n"; }
От сюда .
источник
$#ARGV + 1
вас также можно было бы сказать@ARGV
ARGV[0]
или,$argv[1]
если вы ищете конкретный аргумент.foreach my $arg (@ARGV) { print $arg, "\n"; }
напечатает каждый аргумент.
источник
В качестве альтернативы, более сексуальный образ жизни .....
my ($src, $dest) = @ARGV;
«Предполагает», что переданы два значения. Дополнительный код может подтвердить, что предположение безопасно.
источник
@ARGV
без каких-либо действий с вашей стороны, точно так же, как C / C ++ предоставляет их через argv / argcЕще один вариант - использовать perl -s, например:
#!/usr/bin/perl -s print "value of -x: $x\n"; print "value of -name: $name\n";
Тогда назовите это так:
% ./myprog -x -name=Jeff value of -x: 1 value of -name: Jeff
Или посмотрите исходную статью для получения более подробной информации:
источник
Вы можете получить к ним доступ напрямую, назначив специальную переменную
@ARGV
списку переменных. Так, например:perl tmp.pl 1 2 3 4 5
источник
Если аргументы являются именами файлов, из которых следует читать, используйте оператор ромба (<>), чтобы получить доступ к их содержимому:
while (my $line = <>) { process_line($line); }
Если аргументы являются параметрами / переключателями, используйте GetOpt :: Std или GetOpt :: Long, как уже показано на slavy13.myopenid.com.
Если это что-то другое, вы можете получить к ним доступ, явно пройдя через @ARGV или с помощью
shift
команды:while (my $arg = shift) { print "Found argument $arg\n"; }
(Обратите внимание, что это
shift
сработает только в том случае, если вы находитесь за пределами всехsub
s. Внутри asub
он будет получать список аргументов, переданных в,sub
а не в программу.)источник
my $output_file; if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i")) { $output_file= chomp($ARGV[1]) ; }
источник
Если вам просто нужны некоторые значения, вы можете просто использовать массив @ARGV. Но если вы ищете что-то более мощное для обработки некоторых параметров командной строки, вам следует использовать Getopt :: Long .
источник