繁体   English   中英

打印哈希键时的Perl奇怪结果

[英]Perl weird result when printing hash key

my $dat;
$dat{"1","1","1","1","1"}{'CR'} = "2";

foreach my $k1 (keys %dat){
    print $k1;
}

这是我的代码,应该没问题,可以在其他计算机上执行,但是我的笔记本电脑显示此结果
在此处输入图片说明

它编译没有错误.....可以告诉我发生了什么吗? 它的模块不太确定吗?

您可能要检查perlvar

$; 下标分隔符,用于多维数组仿真。 如果您将哈希元素称为

 $foo{$a,$b,$c} 

这真的意味着

 $foo{join($;, $a, $b, $c)} 

默认值为\\034 ,与awk中的SUBSEP相同。 如果您的密钥包含二进制数据,则$;可能没有任何安全值$;

use strict;
use warnings;

my %dat;
$dat{"1","1","1","1","1"}{'CR'} = "2";
# which is equivalent to
# my $k = join($;, "1","1","1","1","1");
# $dat{$k}{'CR'} = "2";

foreach my $k1 (keys %dat){
    print "$_\n" for map { $_ eq $; ? '$;' : $_ } split //, $k1;
}

输出

1
$;
1
$;
1
$;
1
$;
1

您的哈希不包含您认为的内容。 具体来说,它只有一个键:

#!/usr/bin/env perl    

use strict;
use warnings;

my %dat;
$dat{"1","1","1","1","1"}{'CR'} = "2";

use Data::Dumper; 
print Dumper \%dat

输出:

$VAR1 = {
          '11111' => {
                           'CR' => '2'
                         }
        };

如Сухой27所建议,键中的1 s使用$;的值连接$; 作为分隔符:

#!/usr/bin/env perl    

use strict;
use warnings;

$; = '---';

my %dat;
$dat{"1","1","1","1","1"}{'CR'} = "2";

use Data::Dumper; 
print Dumper \%dat

输出:

$VAR1 = {
          '1---1---1---1---1' => {
                                   'CR' => '2'
                                 }
        };

更改$; 到一个空字符串,您将得到11111作为输出,正如我假设的那样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM