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;通常是最佳实践,因为它有助于及早发现这些类型的错误.