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

为什么';Perl支持双引号中的哈希插值吗?,perl,hash,interpolation,Perl,Hash,Interpolation,为什么Perl不支持双引号内的散列插值?它支持标量($)、数组(@)的插值,那么为什么不支持散列(%)?引用Nathan Torkington的话:“最大的问题是,在printf的双引号字符串中大量使用了%。详细信息是。散列应该如何字符串化?标量是显而易见的,数组也是。但是散列应该是什么呢?这样的严格化有多大用处?它是否比在插值字符串中使用未转换的%字符更有用?修复今天在插值字符串中使用%的所有代码所需的工作量值得吗 如果你能对这些问题给出好的答案,那么我相信P5P会愿意听的。不是对“为什么”的

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

引用Nathan Torkington的话:“最大的问题是,在printf的双引号字符串中大量使用了%。

详细信息是。

散列应该如何字符串化?标量是显而易见的,数组也是。但是散列应该是什么呢?这样的严格化有多大用处?它是否比在插值字符串中使用未转换的%字符更有用?修复今天在插值字符串中使用%的所有代码所需的工作量值得吗


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

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

当然,人们可以尝试:

#!/usr/bin/perl
use warnings;

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

print %hash; #Prints no11no22
print "%hash"; #Prints %hash
但是,我不知道那有什么用


如果您想转储散列或任何其他复杂数据结构的内容,请使用或,具体取决于您的用例。

我不认为Perl cookbook是免费提供的,legallyA解决方法是将散列转换为数组引用,然后取消引用:
print“@{[%hash]}”
@mob,但这不是一个好的解决方法,考虑哈希<代码>我的%h=(“fo bar”=>“fo”、“bar fo”=>“fo”)< /代码>。您将无法确定哪些是键,哪些是值。更好的解决方案是使用某种形式的序列化,如
YAML
JSON
,等等@Chas。欧文斯梅。对于数组
@a=(“foo”,“bar-foo”,“bar”);打印“@a”
你也不知道一个元素从哪里结束,下一个元素从哪里开始。@mob你两年后回复了!哈哈:去看看吧。欧文斯对我问题的评论。哦!我没有听到那句话。我想我会留下这个答案,以防其他人也错过了评论。你可以总是说,
“@{[map{“$\u=>$hash{$\u}\ n”}键%hash]}”
,但这有点傻。我不太奇怪,hash的插值被认为与数组的插值有很大的不同,并且被认为是“不必要的”。我可以知道为什么需要数组的字符串化而不需要哈希吗?@sail数组的字符串化是为了向后兼容。如果它可以从语言中删除,它可能会被删除。实际上,Perl 6没有数组插值。它使用了表达式插值,效果更好:
“{@a.join(',')}”
“{%h.perl}”
“哈希应该如何字符串化?”其他语言(如Java)管理得很好。
#!/usr/bin/perl
use warnings; use strict;

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

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