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

时间:2011-07-18 10:05:25

标签: perl hash interpolation

#!/usr/bin/perl
use warnings;

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

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

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

3 个答案:

答案 0 :(得分:21)

引用内森·托尔金顿的话:“最大的问题是%用于printf的双引号字符串。”更多信息是here

答案 1 :(得分:15)

哈希如何进行字符串化?标量也很明显,数组也是如此。但哈希应该是什么?这样的字符串化有多大用处?它是否比在插值字符串中使用未转义的%字符更有用或更不有用?今天修复在插值字符串中使用%的所有代码需要花费大量工作吗?

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

答案 2 :(得分:4)

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

当然可以尝试:

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

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

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

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

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