You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 09:07:17