让我们假设我有两个哈希.其中一个包含一组数据,只需要保留显示在另一个哈希中的内容.
例如
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) 对不起这个语法问题.我找不到解决办法.我想在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引用.
我是复杂数据结构的新手.我有点理解他们背后的想法,但是在获取数据方面遇到了一些困难.我通过使用Data :: Dumper找到了当前问题孩子的结构....
$VAR1 = {
'4' => {
'engine_coded' => 0,
'name' => 'FILTER_1',
'filter_actions' => {
'X_Override_Queue_Level' => 'Value'
},
'filter_criteria' => [
[
'X_Charge',
'=',
'X_CHARGE_1'
]
]
}
};
Run Code Online (Sandbox Code Playgroud)
我需要做的是确保给定一个过滤器名称(在本例中为"4"),"name"有一个值,以及"filter_actions"和"filter_criteria".
任何人都知道如何最好地完成这个?非常感谢!珍妮
我现在一直在靠墙撞墙几个小时.
我有一个看起来像这样的数据结构(从"Data :: Dumper"输出).这是我自己的错,我正在创建数据结构,因为我正在解析一些输入.
print Dumper $data;
___OUTPUT___
$VAR = { 'NAME' => {
'id' => '1234',
'total' => 192,
'results' => {
'APPLE' => 48 ,
'KUMQUAT' => 61 ,
'ORANGE' => 33 ,
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想打印出逗号分隔列表,首先按"total"排序,然后按"results"数组中每个散列的值排序.
以下代码用于从已存储的数据结构中打印出CSV.
use strict;
use warnings;
# [...lots of other stuff...]
open (my $fh, >out.csv);
print $fh "Name, ID, Label, Count, Total\n";
foreach ( sort { $data->{$b}->{total} <=> $data->{$a}->{total} }
keys %{$data} )
{
my $name = $_;
foreach …Run Code Online (Sandbox Code Playgroud) 我想从文件中读取和处理输入集,然后将其打印出来.我需要使用3个密钥来存储数据.假设有3个键k1, k2, k3
以下哪项将提供更好的性能
$hash{k1}->{k2}->{k3} = $val;
Run Code Online (Sandbox Code Playgroud)
要么
$hash{"k1,k2,k3"} = $val;
Run Code Online (Sandbox Code Playgroud)
对于我之前的问题,我得到的答案是所有perl哈希键都被视为字符串.
我从Perl插件中获得了这部分内容.我不明白它的作用.它是关联数组的数组吗?如果是这样,那么它不应该以@开头吗?任何人都可以对这个问题有所了解吗?
my $arguments =
[ { 'name' => "process_exp",
'desc' => "{BasePlugin.process_exp}",
'type' => "regexp",
'deft' => &get_default_process_exp(),
'reqd' => "no" },
{ 'name' => "assoc_images",
'desc' => "{MP4Plugin.assoc_images}",
'type' => "flag",
'deft' => "",
'reqd' => "no" },
{ 'name' => "applet_metadata",
'desc' => "{MP4Plugin.applet_metadata}",
'type' => "flag",
'deft' => "" },
{ 'name' => "metadata_fields",
'desc' => "{MP4Plugin.metadata_fields}",
'type' => "string",
'deft' => "Title,Artist,Genre" },
{ 'name' => "file_rename_method",
'desc' => "{BasePlugin.file_rename_method}",
'type' => "enum",
'deft' => &get_default_file_rename_method(), …Run Code Online (Sandbox Code Playgroud) 我是perl的新手并且阅读用perl编写的代码.一行如下:
$Map{$a}->{$b} = $c{$d};
Run Code Online (Sandbox Code Playgroud)
我熟悉哈希的样子%samplehash和访问方式$samplehash{a}="b"
但是上面这句话实际上是什么说Map?
我有一个二进制文件,并获得我使用"解包"功能的内容.
我的脚本可以运行32位exe或64位exe.因此我使用了以下代码:
if ( $ENV{PROCESSOR_ARCHITECTURE} eq 'x86' )
{
@data = unpack( "LL8", $binary );
}
else
{
@data = unpack( "Q8", $binary );
}
print Dumper \@data;
Run Code Online (Sandbox Code Playgroud)
但是当我使用32位Active Perl和64位Active perl编译器执行相同操作时,我得到的结果不同:
32位:
$ VAR1 = [129864071,0,47193587,0,16448777,0,41067198,0,129];
64位:
$ VAR1 = [129864071,47193587,16448777,41067198,129,365173507,25208052,152155982]
造成这种差异的原因是什么?如何在仍然使用32位无符号长和64位无符号四元组值的同时使它们相似?
鉴于array @A我们想要检查element $B它是否在其中.一种方法是这样说:
Foreach $element (@A){
if($element eq $B){
print "$B is in array A";
}
}
Run Code Online (Sandbox Code Playgroud)
然而,当它到达Perl时,我总是在思考最优雅的方式.这就是我的想法:如果我们将A转换为变量字符串并使用,有没有办法找出数组A是否包含B
index(@A,$B)=>0
Run Code Online (Sandbox Code Playgroud)
那可能吗?
我正在尝试使用散列哈希与数组值概念生成哈希.我不确定我的语法是否正确.
下面是我希望应该创建具有数组值的哈希哈希值的代码部分.
use strict;
%hash=();
open IN, "samplefile.txt" or die "cannot open file:$!";
while(<IN>){
chomp $_;
my @split=split("\t", $_);
$hash{$split[0]}{$split[1]}=push @{ $hash{$split[0]}{$split[1]} },$split[2];
push(@array, $split[1]);
}
Run Code Online (Sandbox Code Playgroud)
样本数据集:
4 10 2
9 4 3
4 3 2
4 3 8
4 10 5
4 5 2
Run Code Online (Sandbox Code Playgroud)
期待哈希.
%hash=(
'4'=> {
'10'=>'2, 5'
'5' => '2'
'3' => '2,8'
}
'9'=>{
'4'=>'3'
}
)
Run Code Online (Sandbox Code Playgroud)