为什么 Perl 不支持双引号中的哈希值插值?

问题描述 投票:0回答:3
#!/usr/bin/perl
use warnings;

my %hash=("no1"=>1, 
        "no2"=>2,
      );

print %hash; #Prints no11no22
print "%hash"; #Prints %hash

为什么 Perl 不支持在双引号内插入哈希值?它支持标量 ($)、数组 (@) 插值,那么为什么不支持哈希 (%) 插值呢?

perl hash interpolation
3个回答
21
投票

引用 Nathan Torkington 的话:“最大的问题是 % 在 printf 的双引号字符串中大量使用。”更多信息请参见这里


15
投票

哈希应该如何字符串化?标量是显而易见的,数组也是如此。但哈希应该是什么?这样的字符串化有多大用处?它比能够在内插字符串中使用未转义的 % 字符或多或少有用吗?今天修复所有在插值字符串中使用 % 的代码是否值得花费大量工作?

如果你能对这些问题给出好的答案,那么我相信P5P会愿意倾听他们的意见。


4
投票

并不是“为什么”的真正答案,但我想我会指出“如何”的各种答案。

当然可以尝试:

#!/usr/bin/perl
use warnings; use strict;

my %hash = (
    "no1" => 1,
    "no2" => 2,
);

print "@{[ %hash ]}\n";

但是,我不知道那有什么用。

如果您想转储哈希或任何其他复杂数据结构的内容,请根据您的用例使用 Data::DumperYAMLJSON

© www.soinside.com 2019 - 2024. All rights reserved.