Perl:在终端中获取数组,直到用户输入ctrl + z或ctrl + c

时间:2016-03-13 00:39:18

标签: perl

我需要创建一个接收字符串数组的程序,列表应以 CTRL - D (unix)或 CTRL 结尾 - ž(WIN)。我一直在阅读如何做,但我不明白。我不想要答案我只是一个简单的解释,如何在没有完成我的程序的情况下捕获停止

for $i (0...8){
   print "Give me a name of a city: \n";
   $sentence[$i] = <STDIN>; #get value
} 

我的回答是:

print "Give me a name of a city: \n";
$a=0;
$SIG{'INT'} = sub {$a=1;}; #change de flag
while ($a == 0){
   $string = <STDIN>;
   push @sentence, $string;
   if($a == 0){
      print "Give me a name of a city: $a\n";
   }
}

2 个答案:

答案 0 :(得分:0)

我认为您正在寻找的是eof(文件结束)运算符,但我对推荐它感到犹豫,因为它看起来像您正在关注教程< / p>

以下是您的代码的外观。最后一行将@sentence数组的每个元素打印回控制台,以便您可以看到程序仍在运行。按 Ctrl + D Ctrl + Z 表示输入结束并使eof返回 true

for $i ( 0 ... 8 ) {
    print "Give me a name of a city: \n";
    $sentence[$i] = <STDIN>;    #get value
    last if eof;
}

print for @sentence;

请记住,这不是您在编程中经常看到的方法

答案 1 :(得分:0)

您可以在Perl中捕获和处理信号,例如参见this blog post。这是一个在Unix上检查 CTRL + C 的脚本:

use feature qw(say);
use strict;
use warnings;

my @sentence;

local $SIG{INT} = sub { die };

for my $i (0...8) {
   print "Give me a name of a city: \n";
   eval {
       $sentence[$i] = <STDIN>; #get value
   };
   last if $@;
}

say "";
print for @sentence;