目标:
我正在尝试计算文本文件中“列”20 中的值,然后使用文本文件中行中的值打印出现次数。除了“列”0(第一列)之外,有些行是相同的。我正在尝试使用哈希(尽管我对如何使用哈希的理解有限)。
问题:
在子函数中(在 foreach 循环内)执行push时,值不会被推送到循环外的数组中,因此输出不会保存到文件中。在循环内部打印(打印$dummy)并且所有数据都被显示。
输入:
Filename1 Value1a Value2a Value3a ... Column20a ... ColumnENDa
Filename2 Value1b Value2b Value3b ... Column20b ... ColumnENDb
Filename3 Value1c Value2c Value3c ... Column20a ... ColumnENDc
...
输出(在循环内使用 print $dummy ):
2 Column20a Filename1, Filename3
1 Column20b Filename2
...
代码:
use strict;
use warnings;
use Cwd;
use File::Find::Rule;
use File::Spec;
use File::Basename;
use Text::Template;
use File::Slurp;
use List::MoreUtils qw(uniq);
my $current_dir = cwd;
my @test_file = read_file ("test_file.txt");
my %count = ();
my %name = ();
my @test = "Counts\tName\tFile_names";
foreach (@test_file) {
chomp $_;
our(@F) = split('\t', $_, 0);
++$count{"$F[20] "};
$name{"$F[20] "} .= "$F[0]," if $F[20];
sub END {
foreach $_ (keys %name) {
$name{$_} =~ s/,$//;
my $dummy = "$count{$_}\t $_\t $name{$_}\n";
#print $dummy;
push (@test, $dummy);
}
};
}
print "@test";
write_file( 'test.txt', @test);
为什么推送功能在子(foreach 循环)之外不起作用?