下面是我的代码,基本上如果答案是“Y”,则脚本会运行一条消息,如果它是其他内容则关闭。
#! usr/bin/perl
print "Do you wish to run Program? [Y/N]:";
$answer = <>;
if($answer == "Y") {
print "COOOL\n";
} else {
system "exit"
}
答案 0 :(得分:6)
#!/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
]
这是你的线索,你需要做点什么来处理它。
并且strict
和warnings
可以帮助您在遇到问题之前找到问题。
答案 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。