使用关联数组将项目分配给项目编号

时间:2013-11-13 14:36:15

标签: perl hash associative-array

我的目标是将每个项目与其相应的项目编号相关联。我的输入文件很多,但总之如下:

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);

1 个答案:

答案 0 :(得分:4)

我假设您的代码中有use strict;。然后,您需要使用my声明哈希:

my %item;

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

此外,您不应该在my语句中使用if。您可能希望在while循环之外声明$maxStrLength

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

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