2011-02-04 36 views
2

这里是我的代码:如果Perl不工作?

#!/usr/bin/env perl 

sub start 
{ 
    ... 
} 

sub stop 
{ 
    ... 
} 

if (defined $ARGV[0]) 
{ 
    if ($ARGV[0]=='start') {start} 
    elsif ($ARGV[0]=='stop') {stop} 
    else {die "Unrecognized command: $ARGV[0]"} 
}

无论我做什么,虽然,它始终执行&start。难道我做错了什么?

我使用Linux Mint 10和Perl 5.10.1。

回答

14

您正在使用数字比较来检查字符串相等性,在比较它们之前先将参数转换为数字。

在这种情况下,'开始'不是一个数字,所以它被转换为0; $ARGV[0](这里预期为单词)中的值也被转换,导致另一个0和最终条件if (0 == 0),这始终为真。

你想使用eq字符串比较中的操盘手:

if ($ARGV[0] eq 'start') { start } 

对不同的运营商相比,更多信息,请参见docs

请注意(如注释中指出的那样),包括脚本顶部的use warnings;将导致perl从一开始就警告您。总是包括use warnings;use strict;通常是最佳实践,因为它有助于及早发现这些错误。

+9

作为一个数字处理,'开始'与0相同,其他大多数字符串也是如此。使用`使用警告;严格使用;`会有帮助。 – 2011-02-04 17:23:52

+2

的确,在严格警告和警告打开的情况下,问题会立即弹出并显示相关警告消息。 – Ether 2011-02-04 17:29:56