标签: hashref

Perl:如何将键/值对推送到hashref并仍然保留引用

$a = {b=>{c=>1}};   # set up ref
$b = $a->{b};       # ref the ref
$b .= (d=>1,e=>1);  # where we want to assign multiple key/val at once
Run Code Online (Sandbox Code Playgroud)

它的结尾$a应该是这样的:

它的结尾$b应该是这样的:


注意:它与执行操作相同:

$b->{d} = 1;
$b->{e} = 1;
Run Code Online (Sandbox Code Playgroud)

$b = { %$b, d=>1, e=>1 };不是所希望的,因为它会创建一个副本$a并丢失引用.

perl hashref

6
推荐指数
2
解决办法
4388
查看次数

引用找到Perl中预期的偶数大小的列表 - 可能的传递引用错误?

我有一个Perl类/模块,我创建它来显示圣经经文.其中有一个存储多个经文的哈希,其中键是书/章/诗,而值是文本.此哈希值从模块返回.

我将圣经类包含在控制器类中,并且该连接似乎有效.问题是我在执行时遇到错误.我的IDE是因为我正在使用Lynda教程,Eclipse是带有EPIC插件的.

错误是:

Reference found where even-sized list expected at C:/Documents and Settings/nunya/eric.hepperle_codebase/lynda/lamp/perl5/Exercise Files/14 Modules/eh_bibleInspiration_controller.pl line 42.
Use of uninitialized value $value in concatenation (.) or string at C:/Documents and Settings/nunya/eric.hepperle_codebase/lynda/lamp/perl5/Exercise Files/14 Modules/eh_bibleInspiration_controller.pl line 45.
HASH(0x19ad454)  => 
Run Code Online (Sandbox Code Playgroud)

这是CONTROLLER类:

#!/usr/bin/perl
# eh_bibleInspiration_controller.pl by Eric Hepperle - 06/23/13
#

use strict;
use warnings;

use Data::Dumper;
use EHW_BibleInspiration;

main(@ARGV);

sub main
{
    my $o = EHW_BibleInspiration->new; # instantiate new object.
    my %bo_ref = $o->getBibleObj();
    print "\$o is type: " . ref($o) . ".\n"; …
Run Code Online (Sandbox Code Playgroud)

oop perl hash pass-by-reference hashref

6
推荐指数
2
解决办法
2万
查看次数

在Perl中一步声明并填充哈希表

目前,当我想构建一个查找表时,我使用:

my $has_field = {};
map { $has_field->{$_} = 1 } @fields;
Run Code Online (Sandbox Code Playgroud)

有没有办法可以在一个步骤中进行内联初始化?(即在我宣布它的同时填充它?)

perl hash initialization lookup-tables hashref

5
推荐指数
1
解决办法
486
查看次数

复合哈希是否有Hash :: Util替代方案?

我有一个复合hashref如下

my $ch = {
    k1 => [ { k=>1 }, { m=>2 } ],
    k2 => [ { l=>90}, ... ],
};
Run Code Online (Sandbox Code Playgroud)

Hash::Util::lock_hashref_recurse($ch) 没有有效锁定这些值..

@{$ch->{k1}}[0]->{k} = 'New value';被允许 !我如何完全锁定这样的hashref?

perl hash hashref

5
推荐指数
1
解决办法
155
查看次数

如何从哈希元素的引用中获取键

假设$my_ref = \$hash{'mary'}; #my_ref是哈希元素的参考点.
....
稍后,我如何使用它$my_ref来检索它指向的哈希元素的键?即如何从中获取字符串'mary' $my_ref

我问这个问题是因为我有几组用户名列表,一些用户名出现在多个消耗内存的组中.所以我决定创建一个通用的用户名列表,让这些组只存储对相应用户名的引用而不是用户名.

最初,

%group1 = {'mary'=>1, 'luke'=1,'tom'=1,...}  
%group2 = {'mary'=>1, 'sam'=1,'tom'=1,...}
Run Code Online (Sandbox Code Playgroud)

在这里你看到'mary'和'tom'都显示在两者中group1group2消耗内存.(注意我不关心这个例子中的值,这里的值只是因为数据结构是一个哈希值).所以为了减少内存,我希望有一个公共列表存储所有用户名:

%common_hash = {'mary'=>1, 'luke'=1,'tom'=1,'sam'=1...};  
$ref1 = \$common_hash{'mary'};  
$ref2 = \$common_hash{'luke'};  
$ref3 = \$common_hash{'tom'};  
$ref4 = \$common_hash{'sam'};
Run Code Online (Sandbox Code Playgroud)

组仅存储哈希元素的引用:

%group1 = {$ref1=>1, $ref2=1,$ref3=1,...};  
%group2 = {$ref1=>1, $ref4=1,$ref3=1,...}; 
Run Code Online (Sandbox Code Playgroud)

我认为这种方法可以节省大量内存,因为:

  1. 一个用户名一次不存储多次;
  2. groups存储引用(整数)而不是字符串(在我的例子中,每个用户名的长度平均为30个字节,而每个整数只有4个字节(32位sys.)或8个字节(64位sys.)) (顺便说一句,如果一个整数不使用4个字节或8个字节,请纠正我.)
  3. 使用引用我可以立即访问用户名而无需查找.

但是如何从组中获取用户名?

如果我使用@my_ref = keys %group1,我想我会得到'玛丽'的价值,但不是'玛丽'.

$result = $($my_ref[0]);
Run Code Online (Sandbox Code Playgroud)

perl reference hashref

4
推荐指数
1
解决办法
5724
查看次数

引用键的参数类型必须是非散列的hashref或arrayref

    if((scalar keys ($this->{'libraries'}->{$y}->{'cellHash'})) == 0){
Run Code Online (Sandbox Code Playgroud)

这是我得到"引用键的参数类型必须是unblessed hashref或arrayref"错误的行.你能帮我解决这个问题吗?我没有出于明显的原因发布代码.

perl hashref arrayref

4
推荐指数
1
解决办法
1万
查看次数

来自哈希参考的 Perl 访问值

在我的 Perl 代码中,我最终得到了如下所示的哈希引用。我想从中访问单个元素。我尝试了多种方法,但我无法获取它。

#!/usr/bin/perl
#use strict;
use Data::Dumper;
my %h={'one'=>1,'two'=>2};
print Dumper($h{'one'});
Run Code Online (Sandbox Code Playgroud)

输出

$VAR1 = undef;
Run Code Online (Sandbox Code Playgroud)

perl hashref perl-hash

4
推荐指数
1
解决办法
73
查看次数

如何从 perl 哈希引用设置标量列表?

如何从 perl 哈希设置标量列表?

use strict;
my $my_hash = { field1=>'val1', field2=>'val2', field3=>'val3', };
my ($field1,$field2,$field3) = %{$my_hash}{qw(field1 field2 field3)};

print "field1=$field1\nfield2=$field2\nfield3=$field3\n";
Run Code Online (Sandbox Code Playgroud)

perl hashref

3
推荐指数
1
解决办法
104
查看次数

hashref查找中的语法错误,看不到原因

perl -E 'say for map s/(æ|ø|å)/   {qw(æ ae ø oe å aa)}->{$1}/ger, qw(rød gul blå)'
perl -E 'say for map s/(æ|ø|å)/"".{qw(æ ae ø oe å aa)}->{$1}/ger, qw(rød gul blå)'
Run Code Online (Sandbox Code Playgroud)

上面的第一行给了我,syntax error at -e line 1, near "}->"但第二行给了我roedgulblaa预期的一样。这是编译器的弱点,还是有我看不见的某些原因?我测试并在版本5.10、5.22和5.26中获得了此行为。

perl reference hashref

3
推荐指数
1
解决办法
91
查看次数

如何从 Perl hashref 中提取多个值?

如何将 Perl hashref 解压缩为多个命名标量变量?

我已经看到它完成了,但似乎无法使其发挥作用。

假设给定的以及to$hashref的定义,这是我的尝试:$arg1$arg3

my $hashref = { arg1 => 'val1', arg2 => 'val2', arg3 => 'val3',};
my ($arg1,$arg2,$arg3) = @{%$hashref}[qw(arg1 arg2 arg3)]; 
Run Code Online (Sandbox Code Playgroud)

perl hashref

2
推荐指数
1
解决办法
326
查看次数