在我的OSX盒子上工作时,我的perl脚本接受我的论据,没有任何抱怨,在Windows上它没有。
以下是我在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上运行良好。 我该怎么办? 感谢。
答案 0 :(得分:6)
在您的具体示例中:
$ARGV[0] = '-i'
$ARGV[1] = 'G:\perl\E-Garugamblin-1-1-irc.log'
请参阅http://perldoc.perl.org/perlvar.html#%40ARGV
此外,Windows要求命令行参数被双引号括起来,而不是单引号。
最后,编写Perl而不使用'严格;使用警告;'是挫折和最坏情况下的灾难处方。
答案 1 :(得分:-1)
你意识到你的||的右侧将返回true,因为$ s和$ i未定义,将被视为false。
我在我的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)将是真的,所以你输入'错误'块