我的perl脚本出了什么问题?

时间:2011-08-10 09:28:39

标签: perl if-statement

下面是我的代码,基本上如果答案是“Y”,则脚本会运行一条消息,如果它是其他内容则关闭。

#! usr/bin/perl
print "Do you wish to run Program? [Y/N]:";
$answer = <>;
if($answer == "Y") {
 print "COOOL\n";
} else {
 system "exit"
}

7 个答案:

答案 0 :(得分:6)

如果你问的话,Perl会告诉你究竟是什么问题。只需在代码中添加“使用警告”即可。

#!/usr/bin/perl
use warnings;

print "Do you wish to run Program? [Y/N]:";
$answer = <>;
if($answer == "Y") {
 print "COOOL\n";
} else {
 system "exit"
}

然后运行它,给出:

$ ./y
Do you wish to run Program? [Y/N]:Y
Argument "Y" isn't numeric in numeric eq (==) at ./y line 6, <> line 1.
Argument "Y\n" isn't numeric in numeric eq (==) at ./y line 6, <> line 1.
COOOL

如果你也添加“使用诊断”,那就更好了。

$ ./y
Do you wish to run Program? [Y/N]:Y
Argument "Y" isn't numeric in numeric eq (==) at ./y line 7, <> line 1 (#1)
    (W numeric) The indicated string was fed as an argument to an operator
    that expected a numeric value instead.  If you're fortunate the message
    will identify which operator was so unfortunate.

Argument "Y\n" isn't numeric in numeric eq (==) at ./y line 7, <> line 1 (#1)
COOOL

如果你让Perl帮助你找到你的错误,Perl中的编程会容易得多。

答案 1 :(得分:5)

删除换行符。 ==用于数字相等,对于需要eq的字符串。

chomp($answer);
if($answer eq "Y") {

答案 2 :(得分:2)

当您想知道发生了什么时,请开始跟踪您的输入。确保它符合您的想法:

#!/usr/bin/perl
use strict;
use warnings;

print "Do you wish to run Program? [Y/N]:";
$answer = <>;

print "Answer is [$answer]\n";

由于你在变量周围放置大括号,你会注意到任何额外的空格。您应该在$answer中看到额外的内容:

Answer is [Y
]

这是你的线索,你需要做点什么来处理它。

并且strictwarnings可以帮助您在遇到问题之前找到问题。

答案 3 :(得分:2)

使用Term :: Prompt或IO :: Prompt可能会更好。不要重新发明轮子:)

use IO::Prompt;
prompt -yn, 'Do you wish to run Program?' or exit;

答案 4 :(得分:1)

您有换行符,chomp $answer$answer eq "Y"

答案 5 :(得分:0)

您使用数字==来比较字符串。

您可能想要使用“eq”:

if($answer eq "Y") {
    print "COOOL\n";
} else {
     system "exit"
}

正如其他人建议你最后要删除换行符。使用chomp

答案 6 :(得分:0)

除了chomp / chop和eq vs ==之外,您还需要记住答案的情况。你正在测试大写'Y',我愿意打赌你输入的小写'y'并且它们不相等。我建议使用:

 if (($answer eq 'y') || ($answer eq 'Y')) {

或使用uc