Arrays perl哈希数据类型列表顺序

Arrays perl哈希数据类型列表顺序,arrays,perl,sorting,hash,Arrays,Perl,Sorting,Hash,当我编译上述代码时,我得到以下输出 #!/usr/bin/perl %mylist=("svrmlb"=>"10.0.0.1","svrcmb"=>"10.0.0.2","svrkdy"=>"10.0.0.3"); print("key-val\n"); for $x (keys(%mylist)) { print ("$x:$mylist{$x}\n"); } print("\nvals\n"); for $x (values(%mylist)) { pr

当我编译上述代码时,我得到以下输出

#!/usr/bin/perl
%mylist=("svrmlb"=>"10.0.0.1","svrcmb"=>"10.0.0.2","svrkdy"=>"10.0.0.3");

print("key-val\n");
for $x (keys(%mylist))
{
    print ("$x:$mylist{$x}\n");
}

print("\nvals\n");
for $x (values(%mylist))
{
    print ("$x\n");
}
但我的预期产出是

key-val
svrcmb:10.0.0.2
svrkdy:10.0.0.3
svrmlb:10.0.0.1

vals
10.0.0.2
10.0.0.3
10.0.0.1
我的问题是为什么它会被排序,我没有对键或值应用排序。这是散列的特征吗?早些时候,我尝试对其他几个散列数组进行排序,但它们不是这样的。请帮助我理解。

如所述:

散列是由标量值的关联字符串键索引的无序集合


我可以想出两个快速解决方案: 1-将密钥存储在数组中; 2-使用Tie::IxHash;(默认情况下通常不安装此选项)

使用Tie::ixash
运行几次,您可能每次都有不同的输出。这应该可以回答您的问题。是的,顺序正在更改,这意味着键不符合它们输入列表的顺序?确切地说是“我没有对键或值应用排序”。你根本没有指定订单。@ikegami现在我明白了!!!
 key-val
 svrmlb:10.0.0.1
 svrcmb:10.0.0.2
 svrkdy:10.0.0.3

 vals
 10.0.0.1
 10.0.0.2
 10.0.0.3
%mylist=("svrmlb"=>"10.0.0.1","svrcmb"=>"10.0.0.2","svrkdy"=>"10.0.0.3");
@mylist=("svrmlb","svrcmb","svrkdy");

print("key-val\n");
for $x (@mylist)
{
    print ("$x:$mylist{$x}\n");
}

print("\nvals\n");
for $x (@mylist)
{
    print ("$mylist{$x}\n");
}
use Tie::IxHash;
%mylist=("svrmlb"=>"10.0.0.1","svrcmb"=>"10.0.0.2","svrkdy"=>"10.0.0.3");
tie %mylist, 'Tie::IxHash';

print("key-val\n");
for $x (keys(%mylist))
{
    print ("$x:$mylist{$x}\n");
}

print("\nvals\n");
for $x (values(%mylist))
{
    print ("$x\n");
}