我的目标是将每个项目与其相应的项目编号相关联。我的输入文件很多,但总之如下:
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);
答案 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