1

我的目标是将每个项目与其对应的项目编号相关联。我的输入文件很广泛,但总之看起来像这样:

678794:T.V, Samsung 
530871:iPad, Apple   #etc...

我收到一条错误消息:

全局符号 "$items" 需要在 ./items.pl 第 10 行显示包名。

全局符号“%item”需要在 ./items.pl 第 10 行显示明确的包名称。

open (NAMES, 'items.txt') || die "Cant open it $!";

while (<NAMES>) {
    my %items;
    my $maxStrLength = "";
    (my $modelNO, my $item) = split(':',$_);
            $items = $item{$modelNO};
    if(length($item) > $maxStrLength) {
            $maxStrLength=length($item);
    }
}
close NAMES;
exit (0);
4

1 回答 1

4

我假设你use strict;的代码中有。然后你需要声明你的哈希my

my %item;

我建议将您的哈希名称更改为,%items以免与您的 scalar 混淆$item

此外,你不应该my在你的if陈述中使用这样的。您可能希望$maxStrLength在 while 循环之外声明。

我认为这更接近您想要的(自包含的可运行代码):

use warnings;
use strict;

my $maxStrLength = 0;
my %items;
while (<DATA>) {
   my ($modelNO, $item) = split /:/;
   $items{$modelNO} = $item;

   if(length($item)>$maxStrLength) {
     $maxStrLength=length($item);
   }
}

__DATA__
678794:T.V, Samsung 
530871:iPad, Apple
于 2013-11-13T14:47:35.667 回答