2011-05-18 106 views
0

在我的OSX机器上工作时,我的perl脚本接受了我的参数,没有任何抱怨,在它没有的窗口上。运行Perl脚本,文件名为arg

这里是什么即时通讯在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

当你这样做时,你会得到什么:G:> \ perl> perl toxyz.pl ... – Andrew 2011-05-18 03:03:38

+0

哦...它正常工作...为什么这种工作方式不同?它已经在运行脚本cus脚本输出无效的arg消息。 – Dacto 2011-05-18 03:05:28

回答

-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)将是真实的,所以你进入你的 '错误' 块

+0

不,如果你把开关放在arg中,然后在Perl中它将它们收集为var并设置合适的值。所以如果我提供-i $ i = true – Dacto 2011-05-18 03:09:36

+0

G:> \ perl> perl toxyz.pl ...这是有效的。谢谢。 – Dacto 2011-05-18 03:10:34

+0

从未使用过该功能。新东西 – Andrew 2011-05-18 03:12:12

6

在你的具体的例子:

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

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

另外,Windows需要使用双引号包围命令行参数,而不是单个引号。

最后,在不使用'严格;使用警告;'对于沮丧和最糟糕的情况都是灾难。

+0

是的......我只是把事故单在味精。 – Dacto 2011-05-18 03:12:12