Я работаю над скриптом Perl. Как передать параметры командной строки?Как передать аргументы командной строки программе Perl?
Пример:
script.pl "string1" "string2"
Я работаю над скриптом Perl. Как передать параметры командной строки?Как передать аргументы командной строки программе Perl?
Пример:
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
.
Вы передаете их в так же, как вы думаете, и в сценарии, вы получаете их из массива @ARGV
. Например:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
От here.
Стоит также отметить, что в некоторых языках программирования первый (0) аргумент является самой командой или сценарием ... но не в perl, конечно, конечно. – danieltalsky 2008-12-12 05:46:12
Вместо `$ # ARGV + 1` вы могли бы также сказать, что` @ ARGV` – 2008-12-12 09:21:18
просто используют `ARGV [0]` или `$ argv [1]`, если вы ищете конкретный аргумент. – Manoj 2016-11-25 11:19:43
foreach my $arg (@ARGV) {
print $arg, "\n";
}
напечатает каждый аргумент.
Если вы не используете getopts, я бы рекомендовал не разрушающе перемещать список аргументов. На основе http://www.perlmeme.org/howtos/syntax/foreach.html похоже, что синтаксис верен; для оговорки, проверьте раздел, _Side-effects: Управляющая переменная является псевдонимом элемента списка_ – jaredor 2008-12-12 15:32:39
Если аргументы являются именами файлов, чтобы прочитать, использовать бриллиант (<>) оператора, чтобы получить их содержимое:
while (my $line = <>) {
process_line($line);
}
Если аргументы опции/переключатели, используйте Getopt :: Std или Getopt :: Долго, как уже показано slavy13.myopenid.com.
На случай, если они что-то другое, вы можете получить доступ к ним либо пешком через @ARGV явно или с помощью команды: shift
while (my $arg = shift) {
print "Found argument $arg\n";
}
(Заметь, что делает это с shift
будет работать только тогда, когда вы находитесь за пределами всех sub
с. в течение sub
, он будет получать список аргументов, переданных sub
, а не тех, кто перешел к программе.)
Если вы просто хотите, чтобы некоторые значения, вы можете просто использовать @ARGV массив. Но если вы ищете что-то более мощное для обработки некоторых параметров командной строки, вы должны использовать Getopt::Long.
В качестве альтернативы, сексуальнее perlish способ .....
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
Или увидеть the original article для более подробной информации:
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
Какие оболочки вы используете? – reinierpost 2012-04-17 12:14:33
Ну, во-первых, вам понадобится, чтобы это было `./Script.pl` или целая lotta nothin 'будет происходить при запуске. – 2014-07-21 19:59:41