Perl如果不工作?

xsz*_*nix 2 perl comparison if-statement

这是我的代码:

#!/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.

Cam*_*ron 14

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

在这种情况下,'start'不是数字,因此它被转换为0; 中的值$ARGV[0](在这里预期是一个单词)也被转换,产生另一个0和最终条件if (0 == 0),这总是正确的.

您希望使用eq字符串方式比较运算符:

if ($ARGV[0] eq 'start') { start }
Run Code Online (Sandbox Code Playgroud)

有关不同比较运算符的更多信息,请参阅文档.

请注意(正如在评论中已经指出的那样),包括use warnings;在脚本的顶部会引起perl从一开始就警告你.始终包括use warnings;并且use strict;通常是最佳实践,因为它有助于及早发现这些类型的错误.

  • 作为数字处理,'start'与0相同,大多数其他字符串也是如此.使用`使用警告; 使用严格;`会有所帮助. (9认同)
  • 实际上,在严格警告开启的情况下,问题会随着相关的警告信息立即出现. (2认同)