我正在尝试创建一个哈希数组,每个哈希都是绑定的,有序的IxHash.循环遍历我的初始哈希时,键确实是有序的.但是,只要我将它们推入阵列,排序就会消失.我知道这是我对在数组上推送哈希时发生的事情的了解不足,但是如果有人能够启发我,那将非常感激.
#! /usr/bin/perl -w
use strict;
use Data::Dumper;
use Tie::IxHash;
my @portinfo;
tie (my %portconfig, 'Tie::IxHash',
'name' => [ 'Name', 'whatever' ],
'port' => [ 'Port', '12345' ],
'secure' => [ 'Secure', 'N' ]
);
print "Dump of hash\n";
print Dumper(%portconfig);
print "\nDump of array\n";
push @portinfo, {%portconfig};
print Dumper(@portinfo);
Run Code Online (Sandbox Code Playgroud)
输出: -
Dump of hash
$VAR1 = 'name';
$VAR2 = [
'Name',
'whatever'
];
$VAR3 = 'port';
$VAR4 = [
'Port',
'12345'
];
$VAR5 = 'secure';
$VAR6 = [
'Secure',
'N'
];
Dump of array
$VAR1 = {
'secure' => [
'Secure',
'N'
],
'name' => [
'Name',
'whatever'
],
'port' => [
'Port',
'12345'
]
};
Run Code Online (Sandbox Code Playgroud)
你的代码:
push @portinfo, {%portconfig};
print Dumper(@portinfo);
Run Code Online (Sandbox Code Playgroud)
获取绑定的哈希%portconfig并将其内容放入一个新的匿名哈希,然后将其推入@portinfo.因此,您的数组中有一个匿名的,无序的哈希.
你可能想要做的是
push @portinfo, \%portconfig;
print Dumper(@portinfo);
Run Code Online (Sandbox Code Playgroud)
这推动一个参考,以%portconfig进入@portinfo,从而保持您的需要订购.
从而:
#! /usr/bin/perl -w
use strict;
use Data::Dumper;
use Tie::IxHash;
my @portinfo;
tie (my %portconfig, 'Tie::IxHash',
'name' => [ 'Name', 'whatever' ],
'port' => [ 'Port', '12345' ],
'secure' => [ 'Secure', 'N' ]
);
print "Dump of hash\n";
print Dumper(%portconfig);
print "\nDump of array\n";
push @portinfo, \%portconfig;
print Dumper(@portinfo);
Run Code Online (Sandbox Code Playgroud)
给
C:\demos>perl demo.pl
Dump of hash
$VAR1 = 'name';
$VAR2 = [
'Name',
'whatever'
];
$VAR3 = 'port';
$VAR4 = [
'Port',
'12345'
];
$VAR5 = 'secure';
$VAR6 = [
'Secure',
'N'
];
Dump of array
$VAR1 = {
'name' => [
'Name',
'whatever'
],
'port' => [
'Port',
'12345'
],
'secure' => [
'Secure',
'N'
]
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
495 次 |
| 最近记录: |