1
my $fn= "words.txt";
open ($fn), $file;
if (! -e "$fh") $fh="STDIN";
while (<$fn>){;
    my $total_words = @words; #All word count
    my %count;
    $count{$_}++ for @words; # Here are the counts
    my $uniq_words  = scalar keys %count; # Number of uniq words
}
# Print sorted by frequency

print "$_\t$count{$_}" for (sort { $count{$b} <=> $count{$a} } keys %count);

close FILE;
exit 0

I'm getting this error:

Scalar found where operator expected at wordlist.pl line 8, near ") $fh"
        (Missing operator before $fh?)
syntax error at wordlist.pl line 8, near ") $fh"
Execution of wordlist.pl aborted due to compilation errors.

please help

4

4 に答える 4

2
open ($fn), $file;

ここで括弧を削除します。

最初の引数はファイルハンドルで、2 番目の引数はファイル名です。$fnファイル名とファイルハンドルの両方として使用していますが、$file定義されていません。

if (! -e "$fh") $fh="STDIN";

このようにブロックを囲む中括弧を外すことはできません。$fhまた、二度と使用しないため、どうすればよいかわかりません。

Perl の構文について混乱しているようです。どのようにPerlを学んでいますか?

于 2013-10-29T03:42:34.033 に答える
1

$fileおそらく、ファイル名とファイルハンドルの間で混乱したでしょう$fh

最初の 3 行を次のように変更してみてください。

my $file= "words.txt";
if (! -e $file) {
  my $fh = *STDIN;
} else {
  open my $fh, '<', $file;
}

そして、 にタイプミスがあるようです$fn。そうではない$fhでしょうか?

于 2013-10-29T03:42:35.877 に答える