Как я могу передать параметры командной строки программе Perl?

135
задан Peter Mortensen 9 August 2012 в 09:11
поделиться

5 ответов

Зависит от того, что Вы хотите сделать. Если Вы хотите использовать эти два аргумента в качестве входных файлов, можно просто передать их в и затем использовать <> для чтения их содержания.

, Если у них есть другое значение, можно использовать GetOpt::Std и GetOpt::Long для обработки их легко. GetOpt::Std поддержки только односимвольные переключатели и GetOpt::Long намного более гибко. От [1 112] 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.

188
ответ дан 23 November 2019 в 23:43
поделиться
foreach my $arg (@ARGV) {
    print $arg, "\n";
}

распечатает каждый аргумент.

29
ответ дан 23 November 2019 в 23:43
поделиться

Вы передаете их в том, точно так же, как Вы думаете, и в Вашем сценарии, Вы получаете их от массива @ARGV. Как так:

my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";

foreach my $argnum (0 .. $#ARGV) {

   print "$ARGV[$argnum]\n";

}

От здесь .

60
ответ дан 23 November 2019 в 23:43
поделиться

Если аргументами являются имена файлов, которые будут считаны из, используйте ромб (<>) оператор для достигания их содержания:

while (my $line = <>) {
  process_line($line);
}

, Если аргументами являются опции/переключатели, используйте GetOpt:: Станд. или GetOpt:: Долго, как уже показано slavy13.myopenid.com.

На всякий случай, что они - что-то еще, можно получить доступ к ним или путем обхода через @ARGV явно или с эти shift команда:

while (my $arg = shift) {
  print "Found argument $arg\n";
}

(Отмечают, что выполнение этого с shift будет только работать, если Вы будете за пределами всего sub с. В sub, это получит список аргументов, переданных sub, а не переданные программе.)

7
ответ дан 23 November 2019 в 23:43
поделиться

Если Вы просто хотите некоторые значения, можно просто использовать массив @ARGV. Но если Вы ищете что-то более мощное, чтобы сделать некоторую обработку параметров командной строки, необходимо использовать Getopt:: Долго .

2
ответ дан 23 November 2019 в 23:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: