%args = (%hash1,%hash2);当Perl中出现冲突时,这能保证用%hash2重写%hash1吗?
发布于 2011-07-22 17:07:28
是的,是这样的。较晚的密钥会覆盖较早的密钥。
发布于 2011-07-22 17:51:24
如果你没有看到覆盖行为,那么你做错了什么:
#!/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}();来自perldoc perlglossary
标量值的有序集。
来自perldoc perldata
列表对子列表进行自动插值。也就是说,当评估列表时,列表的每个元素都会在列表上下文中进行评估,并将结果列表值插入到列表中,就像每个单独的元素都是列表的成员一样。因此,数组和散列会在列表中丢失其身份
和
可以使用文字列表初始化散列,该列表包含要解释为键和值的项对。
实际的结果是,列表上下文中的散列产生一个键/值对的列表。一旦列表有了顺序(返回顺序),就永远不能保证键和值返回的顺序,但是列表保证了元素的顺序,所以(a => 1, %h)创建了一个以"a"开头的列表,然后是1,然后是%h返回的第一个键,然后是%h返回的第一个值,依此类推。然后将该列表按列表顺序分配给目标散列,这意味着如果键"a"在%h中,则它将覆盖原始列表。
发布于 2011-07-22 20:23:41
不是的。%hash1根本不会被该语句修改。
https://stackoverflow.com/questions/6787766
复制相似问题