【问题标题】:Why can't I match my string from standard input in Perl?为什么我不能从 Perl 的标准输入中匹配我的字符串?
【发布时间】:2011-04-16 01:33:47
【问题描述】:

为什么我的脚本不能正常工作?

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

【问题讨论】:

  • 当然它会检查 if 语句。这是一个荒谬的断言。
  • 添加到 Wooble:一般来说,特别是在学习一门语言时,当该语言似乎出错时,可能是你自己
  • 一个很好的方法来测试这样的事情(明显正确的断言是错误的)是检查你的论点,在这种情况下,你的 if 语句之前的语句 print "'$name'\n"; 会告诉你立即出现问题
  • 哪个 youtube 视频?也许有人需要 LART。

标签: perl


【解决方案1】:

语句$name = &lt;STDIN&gt;; 从标准输入读取并包含终止换行符“\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";
}

【讨论】:

    【解决方案2】:

    编程的诀窍是知道你的数据是什么。当某些事情与您的预期不符时,请查看数据以查看它们是否符合您的预期。例如:

     print "The name is [$name]\n";
    

    您将大括号放在它周围,这样您就可以看到可能存在的任何额外空白。在这种情况下,您会看到:

    The name is [Jon
    ]
    

    这是你的线索,有额外的东西。由于eq 必须完全匹配,因此无法匹配。

    如果您刚开始使用 Perl,请尝试学习 Perl。它比 YouTube 上的随机视频要好得多。 :)

    【讨论】:

    • 我必须找到那本书,我已经购买了 Wrox 出版社的 Perl for Dummies 和Beginning Perl。
    • 不要使用其中任何一个。它们不仅古老,而且不是学习 Perl 的好方法。如果您想要开始 Perl,请从 Apress 获取最新版本,而不是从 Wrox 获取。
    • 拍摄 我已经购买了它,它正在发货。哦,好吧,你是说 Apress 制作了一个更新的更好的版本?
    • 是的,根据定义,最新的 Apress 版本更新。它也更好。作为一般建议,不要购买旧电脑书籍。买最新的。他们不仅应该涵盖更多最近的功能,而且优秀的作者还应该解决人们在早期版本中发现的问题。
    • 而且,在当前的 perlfaq2(以及未来的 perlbook)中有一个很好的 Perl 书籍列表。
    【解决方案3】:

    当您将名称标准输入读取为$name = &lt;STDIN&gt;;

    $name 将有一个尾随换行符。因此,如果我输入 foo ,$name 实际上将有 foo\n。

    要摆脱这个换行符,你可以使用chomp 函数:

    chomp($name = <STDIN>);
    

    【讨论】:

      猜你喜欢
      • 2015-03-02
      • 2019-05-04
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多