我有这段代码,但我不了解$counts{$user}{$program}++;
my %counts;
open my $IN, '<', 'SESSION.txt' or die;
while (<$IN>) {
next if length ($_) < 51;
my ($sid, $user, $terminal, $program) = unpack 'A9 @11 A25 @37 A15 @53 A25';
next if $sid eq '---------'; # you need some way to filter out bogus or header rows
$program =~ s/\(.+//; # based on your example, turn toto (fifi) into toto
$counts{$user}{$program}++; #how that work ?
}
#close $IN;
while (my ($user, $ref) = each %counts) {
while (my ($program, $count) = each %$ref) {
print "User = $count $user with program $program\n";
}
}
答案 0 :(得分:3)
$counts{$user}{$program}++;
递增存储在嵌套哈希中的键$program
上的值,该哈希值(作为参考)存储为$counts{$user}
的值。
当perl看到表达式$counts{$user}{$program}
时,它将创建存储在$counts{$user}
中的(嵌套)哈希(如果尚不存在)。这称为“自身生存”。如果还不存在,perl还将在此(嵌套的)哈希中创建键$program
,并将其值设置为undef。
如果在调用$counts{$user}{$program}
时尚未定义++
处的值,则perl会假定您要在此插槽中输入一个数字并将其初始化为0。