Perl 将哈希数组分配给标量
Perl Assign Array of Hashes to scalar
我对以下两个片段的输出差异感到困惑:
片段 1
use Data::Dumper;
my $q = (
{ q=>1, w=>2 },
{ i=>8 },
);
print "\nOUTPUT_1 $q=[".$q."] ";
print "\nOUTPUT_2 ".Data::Dumper::Dumper ($q);
$q[0]->{a} = "5";
print "\nOUTPUT_3 ".Data::Dumper::Dumper ($q);
输出
OUTPUT_1 HASH(0x872de10)=[HASH(0x872de10)]
OUTPUT_2 $VAR1 = {
'i' => 8
};
OUTPUT_3 $VAR1 = {
'i' => 8
};
片段 2
use Data::Dumper;
my $q = (
{ q=>1, w=>2 },
);
print "\nOUTPUT_1 $q=[".$q."] ";
print "\nOUTPUT_2 ".Data::Dumper::Dumper ($q);
$q[0]->{a} = "5";
print "\nOUTPUT_3 ".Data::Dumper::Dumper ($q);
输出
OUTPUT_1 HASH(0x81861bc)=[HASH(0x81861bc)]
OUTPUT_2 $VAR1 = {
'w' => 2,
'q' => 1
};
OUTPUT_3 $VAR1 = {
'w' => 2,
'q' => 1
};
我看到生产代码中使用了第二个片段。我尝试以代码段 1 中所示的方式扩展它,但失败了。
我的理解
将数组分配给标量时,其计数将存储在该标量中。我相信无论数组的内容如何,这都适用。
我不想在这里解决,但我想纠正我的理解。
查看 perldata 中的 列表值构造函数 。您没有将 $q 创建为数组引用,您只是将列表中的最后一个值分配给 $q。因此,任何将 $q 视为数组引用的尝试都不会像您预期的那样工作。
我对以下两个片段的输出差异感到困惑:
片段 1
use Data::Dumper;
my $q = (
{ q=>1, w=>2 },
{ i=>8 },
);
print "\nOUTPUT_1 $q=[".$q."] ";
print "\nOUTPUT_2 ".Data::Dumper::Dumper ($q);
$q[0]->{a} = "5";
print "\nOUTPUT_3 ".Data::Dumper::Dumper ($q);
输出
OUTPUT_1 HASH(0x872de10)=[HASH(0x872de10)]
OUTPUT_2 $VAR1 = {
'i' => 8
};
OUTPUT_3 $VAR1 = {
'i' => 8
};
片段 2
use Data::Dumper;
my $q = (
{ q=>1, w=>2 },
);
print "\nOUTPUT_1 $q=[".$q."] ";
print "\nOUTPUT_2 ".Data::Dumper::Dumper ($q);
$q[0]->{a} = "5";
print "\nOUTPUT_3 ".Data::Dumper::Dumper ($q);
输出
OUTPUT_1 HASH(0x81861bc)=[HASH(0x81861bc)]
OUTPUT_2 $VAR1 = {
'w' => 2,
'q' => 1
};
OUTPUT_3 $VAR1 = {
'w' => 2,
'q' => 1
};
我看到生产代码中使用了第二个片段。我尝试以代码段 1 中所示的方式扩展它,但失败了。
我的理解
将数组分配给标量时,其计数将存储在该标量中。我相信无论数组的内容如何,这都适用。
我不想在这里解决,但我想纠正我的理解。
查看 perldata 中的 列表值构造函数 。您没有将 $q 创建为数组引用,您只是将列表中的最后一个值分配给 $q。因此,任何将 $q 视为数组引用的尝试都不会像您预期的那样工作。