提问人:Lexi Siefke 提问时间:9/15/2023 最后编辑:Lexi Siefke 更新时间:9/15/2023 访问量:88
Perl 输入到数组
Perl input to array
问:
我正在将输入输入到数组中,直到用户按下命令 d。我起初做了一个 while 循环,但后来切换到 for 循环,您将在评论中看到。无论是 for 循环还是 while 循环,输入都只是每隔一段时间就被放入数组中。因此,如果我输入 a b c d e f,然后打印数组,它只输出 b d f。为什么会发生这种情况,我该如何解决?
print "Please enter your favorite foods, one per line\n";
#my $i = 0;
for(my $i = 0; $foods = <>; $i++){
#while($foods = <>){
chomp($foods = <>);
push(@foods, ($foods));
# $foods[$i] = $foods;
#}
}
Please enter your favorite foods, one per line
a
b
c
d
e
f
bdf
答:
3赞
Dave Cross
9/15/2023
#1
也许是这样的:
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
say 'Please enter your favourite foods, one per line:';
my @food;
while (<>) {
push @food, $_ if /\S/; # ignore empty input
}
chomp @food;
say join ' / ', @food;
2赞
Tom Williams
9/15/2023
#2
OP 代码中的功能问题是 FOR 循环的设置从终端读取 $foods 值,
for(my $i = 0; $foods = <>; $i++)
然后在循环的主体中,我们读入了它的新值,
chomp($foods = <>)
因此,在循环顶部键入的值将被替换,而从未使用过,因此您只是将第二个/第四个/第六个条目推送到数组中。
如果将最后一个代码片段更改为 .chomp($foods)
评论
chomp
while (my $food = <>) { chomp $food; push @foods, $food; }
是一种更惯用的方法。或my @foods = <>; chomp @foods;