%args = (%hash1,%hash2);
当Perl发生冲突时,是否可以保证%hash1
覆盖%hash2
?
答案 0 :(得分:6)
是的,确实如此。后来的密钥会覆盖之前的密钥。
答案 1 :(得分:4)
如果你没有看到覆盖行为,那么你做错了什么:
#!/usr/bin/perl
use strict;
use warnings;
sub func { print "func\n" }
sub tion { print "tion\n" }
my %args = (
handler => \&tion,
);
my $dispatch = {
handler => \&func,
%args
};
$dispatch->{handler}();
LIST会自动插入子列表。也就是说,当评估LIST时,列表中的每个元素都在列表上下文中进行评估,并且结果列表值被内插到LIST中,就好像每个单独的元素都是LIST的成员一样。因此,数组和散列在LIST中失去了它们的身份
和
可以使用包含要解释为键和值的项对的文字列表来初始化哈希。
实际结果是列表上下文中的散列产生键/值对的列表。一旦它是一个列表它有一个订单(它返回的顺序),你永远不能保证键和值将返回的顺序,但列表保证其元素的顺序,所以(a => 1, %h)
创建一个列表以"a"
开头,后跟1
,后跟%h
返回的第一个键,后跟%h
返回的第一个键,依此类推。然后,该列表将按列表顺序分配给目标哈希,这意味着如果密钥"a"
位于%h
中,则它将覆盖原始列表。
答案 2 :(得分:0)
没有。该语句根本不修改%hash1。