打印哈希键时出现 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
$;
The subscript separator for multidimensional array emulation. If you refer to a hash element as
$foo{$a,$b,$c}
it really means
$foo{join($;, $a, $b, $c)}
默认为4
,与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
是使用 $;
的值作为分隔符连接起来的:
#!/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
作为输出,正如我假设的那样。
my $dat;
$dat{"1","1","1","1","1"}{'CR'} = "2";
foreach my $k1 (keys %dat){
print $k1;
}
这是我的代码,应该没问题,可以在其他电脑上执行,但我的笔记本电脑显示这个结果
它编译没有错误.....有人能告诉我发生了什么吗?是不是不太确定模块?
您可能需要查看 perlvar
$; The subscript separator for multidimensional array emulation. If you refer to a hash element as
$foo{$a,$b,$c}
it really means
$foo{join($;, $a, $b, $c)}
默认为4
,与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
是使用 $;
的值作为分隔符连接起来的:
#!/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
作为输出,正如我假设的那样。