我正在尝试在类似
的数组中grep制表符分隔的数字(例如1 \ t3)@data=
1 3
2 3
1 3
3 3
代码背后的想法是这样的
#!usr/bin/perl
use strict;
use warnings;
my @data = ( "1\t3", "2\t3", "1\t3", "3\t3", );
for (my $i=0;$i<4;$i++) {
for (my $j=0;$j<4_size;$j++) {
my $pattern= "$i\t$j";
my @count=grep(/$pattern/,@data);
undef $pattern;
print "$pattern\tcount\n";
}
}
希望输出类似
第1栏和第2栏:模式
第3栏:总比赛次数
1 1
1 2
1 3 2
2 1
2 3 1
3 1
3 2
3 3 1
但由于某些原因输出为空, 我最近学到了很多有趣的东西。 有什么建议吗?
答案 0 :(得分:1)
你几乎得到了它。这是一个工作版本:
#!usr/bin/perl
use strict;
use warnings;
my @data = ( "1\t3", "2\t3", "1\t3", "3\t3", );
foreach my $i (1 .. 3) {
foreach my $j (1 .. 3) {
my $pattern = "$i\t$j";
my $count = grep(/$pattern/, @data);
print $pattern . ($count ? "\t$count\n" : "\n");
}
}
答案 1 :(得分:1)
以下代码:
'('
)"\t"
两侧数字序列的完全匹配项。__DATA__
部分读取的行,而不使用\R
。-
#!/usr/bin/env perl
use strict;
use warnings;
my @data = ( "1\t3", "2\t3", "(\t4", "1\t3", "3\t3", "11\t3" );
for my $i (1 .. 3) {
for my $j (1 .. 3) {
my $pattern = "$i\t$j";
my $count = grep /\A\Q$pattern\E\R?\z/, @data;
print join("\t", $pattern, $count ? $count : ''), "\n";
}
}
输出:
1 1 1 2 1 3 2 2 1 2 2 2 3 1 3 1 3 2 3 3 1