【问题标题】:How can I stop my script instead of progressing如何停止我的脚本而不是继续
【发布时间】:2014-04-18 18:00:49
【问题描述】:

我使用 perl 编写了一个简单的脚本,我想知道如何暂停程序或将其返回到之前的操作?我有这个代码

print "put your name:";
$s=<>;

它没有输出任何东西。我希望程序重复相同的操作,即要求用户输入他的姓名而不是继续。

【问题讨论】:

    标签: perl


    【解决方案1】:
    my $s = '';
    while ($s eq '') {
        print "put your name:";
        chomp($s = <>);
    }
        print "The name you entered is $s \n";
    

    【讨论】:

    • 还有chomp函数是什么意思
    • chomp 删除字符串末尾的返回字符。链接的 perldoc 页面中提供了详细规范。如果您从控制台获取输入,您几乎总是希望压缩该数据。不过可以在单独的行上完成:$s = &lt;&gt;; chomp $s;
    【解决方案2】:

    在开始之前无需将 $name 设置为任何内容 - 只需定义它:

    my $name;
    while ( not length $name ) {  #Thx Dave Cross
        print "What is your name? ";
        $name = <STDIN>;
        chomp $name;
    }
    

    在 Perl 中,使用 my 定义的变量(应该是变量的 99%)具有有限的范围。如果它们是在 block 中定义的(像 while 循环这样使用花括号的东西),一旦离开 block,它们就会失去价值。这就是为什么我必须在while 之前有my $name;

    如果$name 未定义或为空值,while ( not $name ) { 将起作用,因此这将循环,直到我在$name 中输入不为空的内容。

    chomp 删除了我在按下 &lt;ENTER&gt; 键时输入的 NL 字符。在阅读任何类型的内容后,您应该始终 chomp 您的变量。习惯就好了。

    在这种形式中,循环是自我记录的。我正在循环,而 $name 未填写。

    您可以将chomp 与这样的输入结合起来:

    my $name;
    while ( not $name ) {
        print "What is your name? ";
        chomp ( $name = <STDIN> );
    }
    

    有些人喜欢这个,因为它有点短,但我不知道它是否更清晰。我喜欢代码清晰,因为它更容易维护。

    【讨论】:

    • thnx 这个对我有帮助:)
    • 不接受“0”的名称。也许你想要while (not defined $name)while (not length $name)
    • 你是对的。但是,它将接受0 but truewhile ( not length $name ) 是个好主意。我会更新我的答案。
    【解决方案3】:
    sub readstr {
      while (my $in = <>) {
        chomp $in;
        return $in if length $in;
      }
      "";
    }
    
    print "put your name:";
    my $s = readstr();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 2022-07-25
      • 1970-01-01
      • 2019-09-25
      • 2014-03-04
      • 2018-08-22
      相关资源
      最近更新 更多