gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:56:48 27 4
gpt4 key购买 nike

我有一个带有返回哈希值的方法的类。通常,我会得到这样的结果:

%resp = $myclass->sub($foo);

然后像这样访问返回散列的成员:
$resp{key}{subkey};

在二维散列的情况下。

我认为必须有一种方法可以将其组合成一条优雅的线条,如下所示:
$myclass->sub($foo)->{key}{subkey}

这显然没有正确取消引用,因为 Perl 在尝试运行代码时返回它:
Can't use string ("1/8") as a HASH ref

In trying random dereferencing sequences, from looking "References quick reference" on Perlmonks, I came up with the following, which Perl does not complain about, but also does not return what I'm looking for:

$%{$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 .

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

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

关于perl - 如何取消引用从类的方法返回的哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2255333/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com