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