Text-Processing
如何在 perl 中實現字元串到數組雜湊?
我正在嘗試計算特定輸入行上每個單詞的出現次數。給定範例(我想要實現的目標):
$./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}
which 是 hash,其中 key 是 word(string) 而 value 是數組,不是標量。那麼為什麼會出現這個錯誤呢?
正如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"; }
參見例如
我從未使用過 Perl,但從我在網上看到的情況來看,對於您的程式碼的第 4 行,您不必這樣做
@words = split(' ', $_);
或@words = split;
也許試試這個:
while (<>){ ++$line_num; for $w (split){ #Changed this push @{$h{$w}}, $line_num; #Changed this } }