散列的键和值在Perl中是否具有相同的"顺序"?

Tha*_*you 4 perl hash

我知道在perl中没有排序哈希.我关心的是我是否可以依赖索引关系出现的键和值.

说我有这个哈希

my %h = ("a" => 1, "b" => 2, "c" => 3, "d" => 4);
Run Code Online (Sandbox Code Playgroud)

如果我这样做keys %h,我可能会得到

("b", "a", "d", "c")
Run Code Online (Sandbox Code Playgroud)

我能保证values %h以相同的顺序出现以匹配密钥吗?我可以期待吗?

(2, 1, 4, 3)
Run Code Online (Sandbox Code Playgroud)

或者不能保证keys %h和之间有任何指数关系values %h

amo*_*mon 11

是.只要散列未更改(插入或删除)keys,values并且each将保持相同的顺序:

只要给定的散列未经修改,您可以依赖于键,值和每个重复返回相同的顺序.

- 从 perldoc -f keys

所以你可以安全地复制一个哈希,如:

my %orig = ...;
my %copy;
@copy{keys %orig} = values %orig;
Run Code Online (Sandbox Code Playgroud)