Perl数组输入异常:隔项存储输入内容的原因及解决方法
问题原因与修复方案
问题原因
你的代码每次循环执行了两次输入读取操作,直接导致奇数行的输入被丢弃:
- 不管是for循环的条件
$foods = <>,还是注释中while循环的条件$foods = <>,都已经从输入流读取了一行内容; - 但紧接着在
chomp($foods = <>);语句里,又调用了一次<>读取下一行,覆盖了之前读取的值。最终存入数组的只有第二次读取的内容,所以输入a、b、c、d、e、f后,数组里只会有b、d、f。
修复方案
只保留一次输入读取操作,将读取到的内容处理后再存入数组。以下是两种正确的实现方式:
方式一:使用while循环(推荐写法)
print "Please enter your favorite foods, one per line\n"; my @foods; while (my $food = <>) { chomp $food; # 去除换行符 push @foods, $food; # 将处理后的内容存入数组 } # 打印数组内容示例 print join('', @foods), "\n";
方式二:使用for循环
print "Please enter your favorite foods, one per line\n"; my @foods; for (my $i = 0; my $food = <>; $i++) { chomp $food; $foods[$i] = $food; # 通过索引赋值,或用push @foods, $food; } # 打印数组内容示例 print join('', @foods), "\n";
内容的提问来源于stack exchange,提问作者Lexi Siefke
相关产品推荐
相关产品推荐

