来自对象 return 的单个字符串中的 HASH 元素
HASH element from an object's return in a single string
我有一个模块 Module.pm,其函数 getHash()
其中 returns,如您所猜,是数据的散列))。我们都知道如何使用标准模型获得散列的元素形式:
use Module;
my $m = new Module;
my %hash = $m->getHash();
print $hash{needed_element's_key};
一切正常。
但是,如果您需要在单个字符串中写入最后两个字符串 WITHOUT 初始化一个新的 HASH(并占用整个哈希的内存,仅使用一个元素)怎么办?
有没有可能这样做?比如说,$m->getHash()->{needed_element's_key};
当然,给定的示例不起作用。
有什么建议么?
谢谢!
不可能 return 哈希。 Subs 只能 return 一个标量列表。您正在将该标量列表分配给现有哈希 my %hash
并获取该哈希的一个元素。
您可以通过使用匿名散列来掩饰您正在创建新散列的事实:
my $val = { $m->getKeyValPairs() }->{$key};
或者,自定义过滤器可能更有效:
sub find_val {
my $target_key = shift;
while (@_) {
my $key = shift;
my $val = shift;
return $val if $key eq $target_key;
}
return undef;
}
my $val = find_val $key, $m->getKeyValPairs();
但最好的选择是让方法 return 改为对哈希的引用。然后,您就不必执行创建散列的浪费 activity。您只需使用以下内容:
$m->getHashRef()->{$key}
如果一个 sub return %hash
,它实际上 returns 一个键和值列表(交替)。您可以将其放回哈希中并使用以下命令获取特定密钥:
print +{ $m->getHash() }->{needed_element_key};
(需要前导 +
以防止 perl 认为 {
是一个返回要打印到的文件句柄的块。)
但是你最好只返回一个散列引用。
我有一个模块 Module.pm,其函数 getHash()
其中 returns,如您所猜,是数据的散列))。我们都知道如何使用标准模型获得散列的元素形式:
use Module;
my $m = new Module;
my %hash = $m->getHash();
print $hash{needed_element's_key};
一切正常。 但是,如果您需要在单个字符串中写入最后两个字符串 WITHOUT 初始化一个新的 HASH(并占用整个哈希的内存,仅使用一个元素)怎么办?
有没有可能这样做?比如说,$m->getHash()->{needed_element's_key};
当然,给定的示例不起作用。
有什么建议么?
谢谢!
不可能 return 哈希。 Subs 只能 return 一个标量列表。您正在将该标量列表分配给现有哈希 my %hash
并获取该哈希的一个元素。
您可以通过使用匿名散列来掩饰您正在创建新散列的事实:
my $val = { $m->getKeyValPairs() }->{$key};
或者,自定义过滤器可能更有效:
sub find_val {
my $target_key = shift;
while (@_) {
my $key = shift;
my $val = shift;
return $val if $key eq $target_key;
}
return undef;
}
my $val = find_val $key, $m->getKeyValPairs();
但最好的选择是让方法 return 改为对哈希的引用。然后,您就不必执行创建散列的浪费 activity。您只需使用以下内容:
$m->getHashRef()->{$key}
如果一个 sub return %hash
,它实际上 returns 一个键和值列表(交替)。您可以将其放回哈希中并使用以下命令获取特定密钥:
print +{ $m->getHash() }->{needed_element_key};
(需要前导 +
以防止 perl 认为 {
是一个返回要打印到的文件句柄的块。)
但是你最好只返回一个散列引用。