Я работаю над Perl script. Как передать параметры командной строки?
Пример:
script.pl "string1" "string2"
Я работаю над Perl script. Как передать параметры командной строки?
Пример:
script.pl "string1" "string2"
Зависит от того, что вы хотите сделать. Если вы хотите использовать два аргумента в качестве входных файлов, вы можете просто передать их, а затем использовать <>
для чтения их содержимого.
Если они имеют другое значение, вы можете использовать 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
.
Вы передаете их так, как вы думаете, и в своем script вы получите их из массива @ARGV
. Например:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
Из здесь.
foreach my $arg (@ARGV) {
print $arg, "\n";
}
напечатает каждый аргумент.
В качестве альтернативы, более сексуальный perlish way.....
my ($src, $dest) = @ARGV;
"Предполагается, что пройдены два значения. Дополнительный код может подтвердить, что предположение безопасно.
Еще одним вариантом является использование 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
в список переменных.
Итак, например:
( $st, $prod, $ar, $file, $chart, $e, $max, $flag ,$id) = @ARGV;
perl tmp.pl 1 2 3 4 5
Если аргументы являются именами файлов, которые необходимо прочитать, используйте оператор diamond (< > ), чтобы получить их содержимое:
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. Внутри sub
он будет извлекать список аргументов, переданных в sub
, а не те, которые были переданы программы.)
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
Если вам просто нужны некоторые значения, вы можете просто использовать массив @ARGV. Но если вы ищете что-то более мощное для обработки некоторых параметров командной строки, вы должны использовать Getopt:: Long.