在perl结构中哈希

时间:2014-08-05 12:58:24

标签: arrays perl hash perl-data-structures

我尝试创建一个perl结构数组。每个结构包含两个标量和一个哈希。 后来我想找到一个数组项,获取哈希并在哈希中找到一个标量。

我可以在数组中找到该项并获取标量。 但我并不知道如何正确获取哈希值及其中的值。

我尝试了/没有参考。

非常感谢

#hash 
%latestInfo = (
     8 => '30',
);

#struct
package Myobj;
use Class::Struct;
struct( name => '$', majorVer => '$', latestVer => '%');

$w1 = new Myobj;
$w1->name('test');
$w1->majorVer(5);
$w1->latestVer($latestInfo);

#array with all version information
@versions=($w1, ...);

sub getVersionFromMajor
{
    foreach $ver (@versions) {
        if ($ver->majorVer eq $_[0]) {
            return $ver;
        }
    }
}

#
#main
#

#ok: get version info from structures/array
local($ver) = getVersionFromMajor(5); 
local($n) = $ver->name;

#fail: get hash inside item
my $latest = \$ver->latestVer;
%lat = $ver->latestVer;

#fail: get value inside hash
local($m) = $latest{8}; 

1 个答案:

答案 0 :(得分:2)

这一位:

$w1->latestVer($latestInfo);

应该是:

$w1->latestVer(\%latestInfo);

%latestInfo$latestInfo是两个不相关的变量 - %latestInfo是您的哈希值,$latestInfo是未声明的(因此undef)标量。 \%latestInfo是对%latestInfo的标量引用,这是最新的Ver方法(由Class :: Struct创建)要求你提供它。

如果您已完成use strict并宣布所有变量,Perl会告诉您$latestInfo不存在。

此外,这一点:

%lat = $ver->latestVer;

应该是:

%lat = %{ $ver->latestVer };