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



我需要创建一个接收字符串数组的程序,列表应该以CTRL-D(unix)或CTRL-Z(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: $an";
   }
}

你可以在 Perl 中捕获和处理信号,例如这篇博文。下面是一个在 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;
我认为

您正在寻找的是eof(文件结尾)运算符,但我犹豫是否推荐它,因为它看起来像您正在遵循教程

下面是代码的外观。最后一行将@sentence数组的每个元素打印回控制台,以便您可以看到程序仍在运行。按 Ctrl+DCtrl+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;

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

相关内容

最新更新