gpt4 book ai didi

perl - 'global symbol requires explicit package name'的解释

转载 作者:行者123 更新时间:2023-12-04 23:08:33 25 4
gpt4 key购买 nike

我一直在学习 Perl,每当我编写一个重要的脚本时,我总是收到此错误消息。我一直认为我对它有很好的理解,但我想我没有。这是一个带有以下错误的草率马尔可夫链示例(未测试)。


#!/usr/bin/perl -w

use strict;

sub croak { die "$0: @_: $!\n"; }


sub output {
my %chains = shift;
my @keys = keys %chains;

my $index = rand($keys);
my $key = $keys[$index];

my $out_buf = $key;
for (my $i = 0; $i < 100; ++$i) {
my $aref = $chains{$key};
my $word = @$aref[rand($aref)];
$out_buf .= " $word";

$key =~ s/.+ //;
$key .= " $word";
}
print $out_buf, "\n";
}


sub get_chains {
my %chains;
my @prefixes

while (my $line = <FILE>) {
my @words = split " ", $line;

foreach my $word (@words) {
if ($prefixes == 2) {
my $key = join " ", @prefixes;

my $arr_ref = $chains{$key};
push(@$arr_ref, $word);

shift @prefixes;
}
push(@prefixes, $word);
}
}

return %chains;
}



sub load_book {
my $path_name = shift @ARGV;
open(FILE, $path_name) || croak "File not found.\n";
}

load_book;
my %chains = get_chains;
output %chains;

----ERRORS----

"my" variable $line masks earlier declaration in same statement at markov.pl line 33.
"my" variable $path_name masks earlier declaration in same scope at markov.pl line 55.
Global symbol "$keys" requires explicit package name at markov.pl line 12.
syntax error at markov.pl line 32, near ") {"
Global symbol "$prefixes" requires explicit package name at markov.pl line 36.
Global symbol "%chains" requires explicit package name at markov.pl line 48.
syntax error at markov.pl line 49, near "}"
syntax error at markov.pl line 56, near "}"
Execution of markov.pl aborted due to compilation errors.

我犯了什么错误?

最佳答案

您的脚本中存在三个语法错误:

全局符号“$keys”需要在 markov.pl 第 12 行显式包名。

您没有声明 $keys,并且由于“使用严格”,这是一个 fatal error 。
你可能的意思是:

my $index = rand(@keys);

第二个错误:

全局符号“$prefixes”需要在 markov.pl 第 36 行明确的包名称。

是同一件事:你的意思是:
if (@prefixes == 2) {

最后,在第 30 行,您在后面缺少一个分号:
my @prefixes

这会混淆解析器,并导致所有其他错误和警告。

您可能想阅读 perldata如果您不清楚 sigil ($, @, %) 的使用,请查看文档。

关于perl - 'global symbol requires explicit package name'的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3592770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com