为什么我的脚本无法正常运行?
我关注YouTube视频并为该人工作。
我使用ActiveState ActivePerl 5.12.2.1202在Windows上运行Perl
这是我微小的代码块。
print "What is your name?\n";
$name = <STDIN>;
if ($name eq "Jon") {
print "We have met before!\n";
} else {
print "We have not met before.\n";
}
代码会自动跳转到else语句,甚至不会检查if语句。
答案 0 :(得分:18)
语句$name = <STDIN>;
从标准输入读取并包含终止换行符“\n
”。使用chomp
函数删除此字符:
print "What is your name?\n";
$name = <STDIN>;
chomp($name);
if ($name eq "Jon") {
print "We have met before!\n";
} else {
print "We have not met before.\n";
}
答案 1 :(得分:5)
编程的技巧是知道你的数据是什么。如果某些事情没有像您期望的那样,请查看数据,看看它们是否符合您的预期。例如:
print "The name is [$name]\n";
你把大括号放在它周围,这样你就可以看到任何可能存在的额外空格。在这种情况下,你会看到:
The name is [Jon
]
这是你的线索,有额外的东西。由于eq
必须完全匹配,因此无法匹配。
如果您刚开始使用Perl,请尝试学习Perl 。这比来自YouTube的随机视频要好得多。 :)
答案 2 :(得分:4)
当您将名称标准输入读为$name = <STDIN>;
$name
将有一个尾随换行符。因此,如果我输入foo
,$name
实际上会有foo\n
。
要摆脱这个换行符,您可以使用chomp
函数:
chomp($name = <STDIN>);