【问题标题】:hash inside perl structuresperl 结构中的散列
【发布时间】:2014-09-28 03:39:48
【问题描述】:

我尝试创建一个 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}; 

【问题讨论】:

标签: arrays perl hash perl-data-structures


【解决方案1】:

这一点:

$w1->latestVer($latestInfo);

应该是:

$w1->latestVer(\%latestInfo);

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

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

还有,这一点:

%lat = $ver->latestVer;

应该是:

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

【讨论】:

  • 非常感谢,我现在对 perl 变量有了更好的理解;我应用了您的更改,但是当我打印 lat 时仍然为空: print("$ver - $lat - $lat{8}"); #only 显示版本
  • 那是因为(即使除了$latestInfo 标量变量)您有两个单独的散列变量,称为%latestInfo。一个在main 包中定义,一个稍后在Myobj 包中使用。它们是不同的变量。我会重申,如果您use strict,Perl 会告诉您这些问题。
猜你喜欢
  • 1970-01-01
  • 2013-07-19
  • 2013-02-05
  • 2011-12-31
  • 2011-03-13
  • 1970-01-01
  • 2018-12-07
  • 2013-09-10
  • 1970-01-01
相关资源
最近更新 更多