【问题标题】:Assign item to item number using an associative array使用关联数组将项目分配给项目编号
【发布时间】:2013-11-13 14:36:14
【问题描述】:

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

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

【问题讨论】:

  • 确切的错误信息是什么?你能描述一下你想要达到的目标吗?
  • 全局符号 "%item" 需要在 ./items.pl 中显示包名稍后排序报告。

标签: perl hash associative-array


【解决方案1】:

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

my %item;

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

此外,您不应该在您的 if 语句中使用 my 这样的语句。您可能希望在 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

【讨论】:

    猜你喜欢
    • 2014-04-17
    • 2021-10-23
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多