【问题标题】:Why am I having trouble comparing lines from input in Perl?为什么我在比较 Perl 中输入的行时遇到问题?
【发布时间】:2009-03-03 21:21:54
【问题描述】:

我不知道我在这个简单的交易中做错了什么,但它不起作用:

print "OK? (y or n)\n";
$ans = <>;
print "\n";
if($ans eq "y"){print $ans;}

我基本上想知道如何测试用户输入。这一点代码对我不起作用。如果用户输入了y,我只是想打印$ans

有什么建议吗?

编辑:-我也尝试过单引号

【问题讨论】:

    标签: perl validation user-input


    【解决方案1】:

    你做错了几件事。

    (1) 在需要 时不要使用菱形运算符 ()。菱形运算符还会从 @ARGV 读取文件,这可能是您不想要的。

    (2) $ans 永远不会等于“y”,除非你先把它吃掉。最后会有一个换行符。

    【讨论】:

    • 谢谢,为什么 eff 会在 \n 上标记?因为我按回车键注册我的答案?如果你问我,它应该会自动咀嚼......
    • 你有正确的“为什么”。我确定perldoc.perl.org/perlvar.html 中有一些东西可以允许自动咀嚼或其他东西。
    • 不,Perl 不会 autochomp,尽管 Cheese 是正确的,但在大多数情况下它应该是正确的。我认为 Perl 6 默认会自动选择。
    • 如果您必须区分读取以 \n 结尾的行与由于 EOF 导致的部分行结尾之间的区别(行结尾是因为EOF 可能表示用户中止或部分刷新的文件。)
    • 您可以通过在第一行指定“#!/usr/bin/perl -l”来告诉 Perl 自动选择。但是效果是全局的,所以只有在你的脚本很小的时候才这样做。
    【解决方案2】:

    神秘内容变量的万灵药:

    use Data::Dumper;
    $Data::Dumper::Useqq = 1; # show newlines, tabs, etc in visible form
    $Data::Dumper::Terse = 1;
    print '$ans is really: ', Dumper($ans);
    

    【讨论】:

      【解决方案3】:

      虽然您的直接问题已得到解答,但您可能需要查看诸如 Term::Readline 之类的替代方案

      【讨论】:

        【解决方案4】:

        你试过了吗:

        if($ans eq 'y'){print $ans;}
        

        ?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-29
          • 1970-01-01
          • 2011-07-21
          • 1970-01-01
          • 1970-01-01
          • 2012-11-13
          相关资源
          最近更新 更多