use Data::Dumper ;
my %count_of_si ; #统计si出现的次数
my %p_of_si ; #统计si为0的次数
my $raw_read_in ;
while($raw_read_in = <>){
#样式比对 把该行内首先出现的,被space or tab 分隔的两组数字放入list内
#样式最后的x代表空格会被忽略
my @filtered
= ( $raw_read_in =~ m/^ [\s\t]* (\d+) [\s\t]+ (\d+) /x ) ;
#如果比对失败 @filtered的内容为 undef, 进入下轮循环
next if ( !defined $filtered[0] ) ;
#首次执行到这里时@filtered内为(0,1) , $count_of_si{1} == undef,
#执行完这一行 $count_of_si{1}==1
$count_of_si{ $filtered[1] }++ ;
#类推
$p_of_si{ $filtered[1] }++ if $filtered[0] == 0 ;
}
print Dumper( @count_of_si{ sort keys %count_of_si } ) ;
print "\n" ;
print Dumper( @p_of_si{ sort keys %p_of_si} ) ;
__END__
顺便说一下, eq, lt, gt是拿来作字串比对用的
==, <, > 才是拿来作数字比对用的
有不恰当的地方还请指正喔~
※ 引述《hws110 ( only you )》之铭言:
: 大家好
: 小弟最近在用perl去读取档案并取值
: 档案的内容是这样
: 0 1
: 0 2
: 0 3
: 0 4
: 1 1
: 0 2
: 2 3
: 1 4
: 0 1
: 1 2
: 右边的1、2、3、4是代号
: 左边的数字则是得到的资料
: 我的程式是将1、2、3、4的资料统计出来
: 例如说0有几个,1有几个,2有几个这样
: 我的写法如下
: