加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 如何取消引用从类方法返回的哈希?

发布时间:2020-12-15 21:54:46 所属栏目:大数据 来源:网络整理
导读:我有一个类,返回一个哈希值的方法.通常,我会得到如下结果: %resp = $myclass-sub($foo); 然后像这样访问返回的哈希的成员: $resp{key}{subkey}; 在2d哈希的情况下. 我认为必须有一种方法将它组合成一条优雅的线条,如下所示: $myclass-sub($foo)-{key}{sub
我有一个类,返回一个哈希值的方法.通常,我会得到如下结果:
%resp = $myclass->sub($foo);

然后像这样访问返回的哈希的成员:

$resp{key}{subkey};

在2d哈希的情况下.

我认为必须有一种方法将它组合成一条优雅的线条,如下所示:

$myclass->sub($foo)->{key}{subkey}

这显然没有被正确解除引用,因为Perl在尝试运行代码时会返回此信息:

Can't use string ("1/8") as a HASH ref

在尝试随机解引用序列时,从查看“References quick reference” on Perlmonks,我想出了以下内容,Perl没有抱怨,但也没有返回我正在寻找的内容:

$%{$myclass->sub($foo)}->{key}{subkey}

有人能告诉我神奇的解除引用转义序列是做什么的吗?

解决方法

你要做的事既不优雅也不可取.你以某种方式设法在标量上下文中调用例程(这是“1/8”对应的).

返回哈希引用.

现在,来看看:

#!/usr/bin/perl

package My::Mine;

use strict; use warnings;

sub test {
    my %h = (
        a => { z => 1},b => { y => 2},);
    return %h;
}

package main;

use strict; use warnings;

my $class = 'My::Mine';

print { $class->test }->{a}{z},"n";

那样不行.相反,你必须这样做:

print +{ $class->test }->{a}{z},"n";

现在,这很优雅(不!)见perldoc -f print.

长话短说,返回哈希的引用.

请注意,您正在构建的新匿名哈希不是免费的.将哈希作为平面列表从子例程返回的成本也不是.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读