如何将Perl中@new循环输出的"$_ "内容存入数组?
解决方法:将循环输出内容存入数组
要把原本用print输出的"$fruit_list: $_\n"内容存入数组,只需要声明一个数组来存储这些字符串,在循环里把生成的字符串push进去即可。另外帮你修正原代码里的几个冗余/逻辑问题:
- 原代码中
@new被重复赋值,grep的结果会被后面的map覆盖,应该先做map处理再过滤 - 重复
chomp没必要,qx返回的结果chomp一次就够
修正后的完整代码如下:
# 声明存储结果的数组,放在循环外可保存所有fruit_list的结果 my @output_lines; foreach my $fruit_list (@fruit_list) { my @fruitcheck = qx(grep -oP "fruit\\s+$fruit_list\\K\\s+\\S+\\s+[1-9]" $file); chomp @fruitcheck; # 先统一空格格式,再过滤有效行 my @new = grep { /\S+\s+[1-9]/ } map { join(' ', split(' ')) } @fruitcheck; # 把每个生成的字符串存入数组,替代原print逻辑 push @output_lines, "$fruit_list: $_" for @new; } # 验证数组内容(可选) use Data::Dumper; print Dumper \@output_lines;
效果说明
以你提供的文件内容为例,假设@fruit_list包含apple、grapes、mango,最终@output_lines里的内容会是:
apple: apple 3 apple: apple 5 mango: mango 9
如果需要保留换行符,把push的内容改成"$fruit_list: $_\n"即可,后续需要输出时直接执行print @output_lines就能得到和原代码一致的打印效果。
内容的提问来源于stack exchange,提问作者Blurman
相关产品推荐
相关产品推荐

