Відповіді:
Залежить від того, що ви хочете зробити. Якщо ви хочете використовувати два аргументи як вхідні файли, ви можете просто передати їх і потім використати <>
для читання їх вмісту.
Якщо вони мають інше значення, ви можете використовувати 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
Або дивіться оригінальну статтю для більш детальної інформації:
Якщо аргументи є іменами, з яких слід прочитати, скористайтеся оператором 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. У межах a sub
, він отримає перелік аргументів, переданих до, sub
а не тих, що передаються програмі.)
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
Якщо ви просто хочете отримати деякі значення, ви можете просто використовувати масив @ARGV. Але якщо ви шукаєте щось більш потужне для того, щоб обробити деякі параметри командного рядка, вам слід скористатися Getopt :: Long .
./script.pl
або ж ціла лота нічого не відбудеться під час виконання.