Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 使用关联数组将项目指定给项目编号_Perl_Hash_Associative Array - Fatal编程技术网

Perl 使用关联数组将项目指定给项目编号

Perl 使用关联数组将项目指定给项目编号,perl,hash,associative-array,Perl,Hash,Associative Array,我的目标是将每个项目与其对应的项目编号相关联。我的输入文件很广泛,但简而言之如下所示: 678794:T.V, Samsung 530871:iPad, Apple #etc... 我收到一个错误,说明: 全局符号“$items”要求在./items.pl第10行显示包名 open (NAMES, 'items.txt') || die "Cant open it $!"; while (<NAMES>) { my %items; my $maxStrLen

我的目标是将每个项目与其对应的项目编号相关联。我的输入文件很广泛,但简而言之如下所示:

678794:T.V, Samsung 
530871:iPad, Apple   #etc...
我收到一个错误,说明:

全局符号“$items”要求在./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第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);
open(name,'items.txt')| | die“无法打开$!”;
而(){
我的%项目;
我的$maxStrLength=“”;
(my$modelNO,my$item)=拆分(':',$);
$items=$item{$modelNO};
if(长度($item)>maxStrLength){
$maxStrLength=长度($item);
}
}
姓名相近;
出口(0);

我假设你有
使用严格在您的代码中。然后您需要使用
my
声明哈希:

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

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

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

使用警告;
严格使用;
我的$maxStrLength=0;
我的%项目;
而(){
我的($modelNO,$item)=拆分/:/;
$items{$modelNO}=$item;
if(长度($item)>maxStrLength){
$maxStrLength=长度($item);
}
}
__资料__
678794:T.V,三星
530871:iPad、苹果

我假设你有
使用严格在您的代码中。然后您需要使用
my
声明哈希:

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

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

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

使用警告;
严格使用;
我的$maxStrLength=0;
我的%项目;
而(){
我的($modelNO,$item)=拆分/:/;
$items{$modelNO}=$item;
if(长度($item)>maxStrLength){
$maxStrLength=长度($item);
}
}
__资料__
678794:T.V,三星
530871:iPad、苹果

确切的错误消息是什么?您能描述一下您想要实现的目标吗?全局符号“%item”要求在./items.pl处有明确的包名。我试图去掉冒号,然后将每个项链接到相应的编号,稍后我将打印一份排序报告。确切的错误消息是什么?您能描述一下您想要实现的目标吗?全局符号“%item”要求在./items.pl处有明确的包名。我试图去掉冒号,然后将每个项链接到相应的编号,稍后我将打印一份排序报告。