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

xvi*_*_16 0 perl hash key

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

foreach my $k1 (keys %dat){
    print $k1;
}
Run Code Online (Sandbox Code Playgroud)

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

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

Сух*_*й27 5

你可能想检查一下 perlvar

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

$foo{$a,$b,$c}
Run Code Online (Sandbox Code Playgroud)

这真的意味着

$foo{join($;, $a, $b, $c)}
Run Code Online (Sandbox Code Playgroud)

默认值\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;
}
Run Code Online (Sandbox Code Playgroud)

产量

1
$;
1
$;
1
$;
1
$;
1
Run Code Online (Sandbox Code Playgroud)