为什么我不能匹配Perl中标准输入的字符串?

时间:2010-09-23 02:54:38

标签: perl

为什么我的脚本无法正常运行?

我关注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语句。

3 个答案:

答案 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>);