我正在尝试创建一个哈希数组,但是我在循环数组时遇到了麻烦.我试过这段代码,但它不起作用:
for ($i = 0; $i<@pattern; $i++){
while(($k, $v)= each $pattern[$i]){
debug(" $k: $v");
}
}
Run Code Online (Sandbox Code Playgroud) 我有这样的哈希:
my %h = ( a => { one => 1,
two => 2
},
b => { three => 3,
four => 4
},
c => { five => 5,
six => 6
}
);
print join(',', @{$h{a}{qw/one two/}});
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:不能使用未定义的值作为q.pl第17行的ARRAY引用,这是打印行.
我的预期是1,2
让我们假设我有两个哈希.其中一个包含一组数据,只需要保留显示在另一个哈希中的内容.
例如
my %hash1 = (
test1 => { inner1 => { more => "alpha", evenmore => "beta" } },
test2 => { inner2 => { more => "charlie", somethingelse => "delta" } },
test3 => { inner9999 => { ohlookmore => "golf", somethingelse => "foxtrot" } }
);
my %hash2 = (
major=> { test2 => "inner2",
test3 => "inner3" } );
Run Code Online (Sandbox Code Playgroud)
我想要做的是删除hash1中的整个subhash,如果它不作为hash2 {major}中的键/值存在,最好没有模块."innerX"中包含的信息无关紧要,只需要保持不变(除非删除子哈希然后它就会消失).
在上面的示例中,在执行此操作之后,hash1将如下所示:
my %hash1 = (
test2 => { inner2 => { more => "charlie", somethingelse …Run Code Online (Sandbox Code Playgroud) 我有一组哈希,都有相同的键组,例如:
my $aoa= [
{NAME=>'Dave', AGE=>12, SEX=>'M', ID=>123456, NATIONALITY=>'Swedish'},
{NAME=>'Susan', AGE=>36, SEX=>'F', ID=>543210, NATIONALITY=>'Swedish'},
{NAME=>'Bart', AGE=>120, SEX=>'M', ID=>987654, NATIONALITY=>'British'},
]
Run Code Online (Sandbox Code Playgroud)
我想编写一个子程序,它将使用给定的键层次结构将其转换为哈希哈希值:
my $key_hierarchy_a = ['SEX', 'NATIONALITY'];
aoh_to_hoh ($aoa, $key_hierarchy_a) = @_;
...
}
Run Code Online (Sandbox Code Playgroud)
将返回
{M=>
{Swedish=>{{NAME=>'Dave', AGE=>12, ID=>123456}},
British=>{{NAME=>'Bart', AGE=>120, ID=>987654}}},
F=>
{Swedish=>{{NAME=>'Susan', AGE=>36, ID=>543210}}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这不仅会创建正确的密钥层次结构,还会删除现在的冗余密钥.
我陷入困境,需要在正确的分层位置创建新的,最内部的哈希.
问题是我不知道"深度"(即键的数量).如果我有一个常数,我可以这样做:
%h{$inner_hash{$PRIMARY_KEY}}{$inner_hash{$SECONDARY_KEY}}{...} = filter_copy($inner_hash,[$PRIMARY_KEY,$SECONDARY_KEY])
Run Code Online (Sandbox Code Playgroud)
所以也许我可以编写一个循环,一次添加一个级别,从散列中删除该键,而不是将剩余的散列添加到"当前"位置,但它有点麻烦,我也不知道如何保持哈希散列中的"位置"......
对不起这个语法问题.我找不到解决办法.我想在perl中有一个哈希数组,每个哈希都有字符串和数组.我正在尝试编写以下代码:
use strict;
my @arr = (
{ name => "aaa" , values => ("a1","a2") },
{ name => "bbb" , values => ("b1","b2","b3") }
);
foreach $a (@arr) {
my @cur_values = @{$a->{values}};
print("values of $a->{name} = @cur_values\n");
};
Run Code Online (Sandbox Code Playgroud)
但这对我不起作用.我收到编译错误和警告(使用perl -w)
a.pl第2行的匿名哈希中奇数个元素.在a.pl第9行使用"strict refs"时,不能使用字符串("a1")作为ARRAY引用.
我引用了一个hases数组,我将其传递给perl脚本中的子例程
这是代码:
sub mySub {
(my $resultref) = @_;
my @list = @$resultref;
print Dumper(@list);
foreach my $result (@list) {
print Dumper($result);
}
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
$VAR1 = [
{
'portName' => '1.1',
'ips' => [
'192.168.1.242'
],
'switchIp' => '192.168.1.20',
'macs' => [
'00:16:76:9e:63:47'
]
},
{
'portName' => '1.10',
'ips' => [
'192.168.1.119',
'192.168.1.3'
],
'switchIp' => '192.168.1.20',
'macs' => [
'd0:67:e5:f8:7e:7e',
'd0:67:e5:f8:7e:76'
]
},
];
$VAR1 = [
{
'portName' => '1.1',
'ips' => [
'192.168.1.242'
],
'switchIp' …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个独特的数组,无论其原始顺序如何,并且不使用任何模块,这是我到目前为止所提出的:
my @arr = qw(b a a c d g e f);
my %hash;
@hash{@arr}=();
say keys %hash;
Run Code Online (Sandbox Code Playgroud) 我需要将一个平面的密钥列表转换为嵌套的哈希,如下所示:
我的$ hash = {};
我的@array = qw(key1 key2 lastKey Value);
ToNestedHash($ hash,@ array);
会这样做:
$ hash {'key1'} {'key2'} {'lastKey'} ="价值";
我已将最常见的emp表导出为CSV.我想将每个列名称作为哈希键并将值存储在数组中.
下面是代码
use Data::Dumper;
open($fh,"<EMP.csv");
%hash = ();
local $/= "\n";
while(<$fh>){
@columnNames = split(/,/,$_) if $. ==1;
@columnValues = split(/,/,$_);
push @{hash->{@columnNames}} ,@columnValues;
}
print Dumper(\%hash);
Run Code Online (Sandbox Code Playgroud)
当我尝试打印哈希时,我得到了这个
$VAR1 = {
'8' => [
'"EMPNO"',
'"ENAME"',
'"JOB"',
'"MGR"',
'"HIREDATE"',
'"SAL"',
'"COMM"',
'"DEPTNO"
',
'"7839"',
'"KING"',
'"PRESIDENT"',
'""',
'"11/17/1981"',
'"5000"',
'""',
'"10"
',
Run Code Online (Sandbox Code Playgroud)
但我期待这一点
$VAR1 = { '"EMPNO"'=>[12,3,4,5,6,7,8,9],
'"EMPNAME"'=>["pavan","kumar"...],
};
Run Code Online (Sandbox Code Playgroud) 我想使用相同的键构建多个哈希,并且当我打印它们时键要具有相同的顺序.因此,在下面的例子中,密钥$hash1和$hash2应始终具有相同的顺序,但应该没有必要创建哈希时保留这个顺序.
use Data::Dumper;
my $hash1 = {
keyc => 2,
key1 => 1,
keya => 3,
keyb => 4,
};
my $hash2 = {
keyc => 2,
key1 => 1,
keya => 3,
keyb => 4,
};
print Dumper $hash1, $hash2;
Run Code Online (Sandbox Code Playgroud)
但输出如下:
$VAR1 = {
'key1' => 1,
'keyc' => 2,
'keyb' => 4,
'keya' => 3
};
$VAR2 = {
'keyb' => 4,
'keya' => 3,
'keyc' => 2,
'key1' => 1
};
Run Code Online (Sandbox Code Playgroud)
即哈希有不同的意外顺序.我的perl出了什么问题? …