#!/usr/bin/perl
use warnings;
my %hash=("no1"=>1,
"no2"=>2,
);
print %hash; #Prints no11no22
print "%hash"; #Prints %hash
为什么Perl不支持在双引号内插入哈希值?它支持标量($), 数组(@)的内插,那为什么不支持哈希(%)的内插呢?
#!/usr/bin/perl
use warnings;
my %hash=("no1"=>1,
"no2"=>2,
);
print %hash; #Prints no11no22
print "%hash"; #Prints %hash
为什么Perl不支持在双引号内插入哈希值?它支持标量($), 数组(@)的内插,那为什么不支持哈希(%)的内插呢?
如何对哈希进行字符串化?标量和数组很明显,但哈希应该怎么办?这样的字符串化有多有用?它比在插值字符串中能够不转义使用%字符更有用还是不那么有用?花费时间来修复所有今天在插值字符串中使用%的代码值得吗?
如果您能够对这些问题提出好的答案,我相信P5P会愿意倾听。
"{ @a.join(',') }"
和"{ %h.perl }"
。 - Chas. Owens虽然我不能回答“为什么”,但我可以提供各种回答“如何”的方法。
当然,我们可以尝试以下方法:
#!/usr/bin/perl
use warnings; use strict;
my %hash = (
"no1" => 1,
"no2" => 2,
);
print "@{[ %hash ]}\n";
但是,我不知道那会有什么用。
如果您想转储哈希或任何其他复杂的数据结构,请根据您的使用情况使用 Data::Dumper、YAML 或 JSON。
"@{[ map { "$_ => $hash{$_}\n" } keys %hash]}"
,但那有点傻。 - Chas. Owens
print "@{[%hash]}"
- mobmy%h =(“foo bar”=>“foo”,“bar foo”=>“foo”)
。您将无法确定哪些是键,哪些是值。更好的解决方案是使用某种序列化形式,如YAML
,JSON
等。 - Chas. Owens@a=("foo","bar foo","bar");print "@a"
,你也无法确定一个元素何时结束,下一个元素何时开始。 - mob$"=",";print "@a"
。当然,你可以添加一些全局变量来控制哈希的打印方式,但更多的全局变量是 Perl 最不需要的,特别是当将数据序列化为字符串是 YAML、JSON 等已经解决的问题时。 - Chas. Owens