子程序的非法声明,perl

illegal declaration of subroutine, perl

我正在阅读一本书,并根据一些示例制作了以下内容以回答练习。我可能搞砸了一些东西,但对我来说看起来还不错。我收到错误:第 31 行 x3.pl 处的子例程 main::read_file 的非法声明。我不确定这里有什么问题,希望得到帮助。作者想使用 croak,所以如果搞砸了,请将其包含在解决方案中。

use strict;
use warnings;

sub croak { die "[=10=]: @_: $!\n" }

sub read_file {
    my $file = shift;
    open (FILE, $file) || croak "Couldn't open $file";

    while (my $line = <FILE>) {
        read_line $line;
        }
        }

sub read_line {
    our %hash;

    my @list = split " ", shift;
    foreach my $word (@list) {
        $hash{$word}++;
        }
        }

sub print_has {
    our %hash;

    my @list = keys %hash;
    print "@list\n";
    }

sub read_file @ARGV
sub print_has

这是错误的:

sub read_file @ARGV
sub print_has

我想你是想打电话给潜艇?子例程调用不使用 sub 关键字。

read_file @ARGV;
print_has;

代码中存在许多不良做法,其中之一阻止了代码 运行。您应该对其进行 code review.