Perl 输入到数组

Perl input to array

提问人:Lexi Siefke 提问时间:9/15/2023 最后编辑:Lexi Siefke 更新时间:9/15/2023 访问量:88

问:

我正在将输入输入到数组中,直到用户按下命令 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
数组字符串 perl 输入

评论

1赞 Shawn 9/15/2023
循环的每次迭代都会读取两行并丢弃第一行(第二次读取在行中)chomp
2赞 Shawn 9/15/2023
while (my $food = <>) { chomp $food; push @foods, $food; }是一种更惯用的方法。或my @foods = <>; chomp @foods;

答:

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)