我需要创建一个接收字符串数组的程序,列表应以 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";
}
}
答案 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;