特定の入力行で各単語の発生回数を計算しようとしています。与えられた例(私が達成したいもの):
$./foo.pl
asd fgh
asd iop
zxc
asd: 1, 2
fgh: 1
iop: 2
zxc: 3
単語がどの行に現れるかを記録するプログラムです。このスクリプトは次のとおりです。
#!/usr/bin/perl -w
while(<>){
++$line_num;
@words = split $_;
for my $w(@words){
push @h{$w}, $line_num;
}
}
for my $k(keys %h){
print "$k:\t";
print "@h{$k}\n";
}
エラーが発生します。
Experimental push on scalar is now forbidden
しかし、@h{$w}
キーが単語(文字列)であり、値がスカラーではなく配列であるハッシュです。それでは、なぜこのようなエラーが発生するのでしょうか?
ベストアンサー1
で述べたようにrakesh sharmaでコメント、アクセス構文匿名配列ハッシュの要素はです@{ $h{$w} }
。たとえば、
#!/usr/bin/perl -w
while(<>){
for my $w (split) {
push @{ $h{$w} }, $.;
}
}
for my $k (keys %h) {
print "$k:\t", "@{ $h{$k} }\n";
}
例を見る