Запуск сценария Perl с именем файла в виде аргумента - PullRequest
0 голосов
/ 18 мая 2011

При работе на моем OSX-боксе мой perl-скрипт принимает мои аргументы без нареканий, на окнах - нет.

Вот что я делаю в cmd:

G:\perl>toxyz.pl -i "G:\perl\filename.log"
Error: invalid arguments.
G:\perl>

Мой perl-код:

#!/usr/bin/perl -w -s
use File::Basename;

$logfile = $ARGV[0];

if(!$logfile || (!$s && !$i)){
    print STDERR "Error: invalid arguments.";
    exit(1);
}

Это отлично работает на OSX.Что я должен делать?Спасибо.

Ответы [ 2 ]

6 голосов
/ 18 мая 2011

В вашем конкретном примере:

$ARGV[0] = '-i'
$ARGV[1] = 'G:\perl\E-Garugamblin-1-1-irc.log'

См. http://perldoc.perl.org/perlvar.html#%40ARGV

Кроме того, Windows требует, чтобы аргументы командной строки были заключены в двойные кавычки, а не в одинарные.

Наконец, написание Perl без 'use strict; используйте предупреждения; это рецепт для разочарования и, в худшем случае, катастрофы.

0 голосов
/ 18 мая 2011

Вы понимаете, что правая сторона вашего || вернет true, так как $ s и $ i не определены и будут рассматриваться как ложные.

Я получил это на моем Mac ...

Name "main::s" used only once: possible typo at ./tmp.pl line 6.
Name "main::i" used only once: possible typo at ./tmp.pl line 6.

как таковое (! $ S &&! $ I) будет истинным, и поэтому вы вводите свой блок 'error'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...