如何访问另一个文件中的哈希值?

问题描述 投票:0回答:2

以下是P4site.pm的内容:

 our %regVal = (
        'wint' => {
            'Bangalore' => {
                'regSuffix' => 'reg_run',
                'P4PORT' => {
                    'rd' => '9876',
                    'pv' => '1991',
                },
            },
            'Noida' => {  
                 'activeRelease' => {
                    'rd' => {
                             '43.1' => ['rc011', 'nfm'],
                             '98.3' => ['rc008', 'nfm'],
                             '57.3' => ['rc001', 'nfm'],
                     },
                    'pv' => {
                             '43.1' => ['rc011', 'nfm'],
                             '98.3' => ['rc008', 'nfm'],
                             '57.3' => ['rc001', 'nfm'],
                     }
                }

我的 Perl 代码是:

use strict;
use warnings;
use FindBin qw($Bin);
use lib "$Bin/modules";
use P4site;
use Data::Dumper;

print Dumper(\%{$P4site::regVal});

foreach my $branches (sort keys %{$P4site::{regVal}})
{
    print "$branches is bracnhes\n";
}

为什么

sort keys %{$P4site::{regVal}}
没有给出任何输出?

perl 代码的输出是:

Name "P4site::regVal" used only once: possible typo at allUtilsCopyUserRunMach.pl line 14.
$VAR1 = {};

我期望在运行此 Perl 代码后会打印 regVal 哈希的键(在 P4site 中提到)?如何打印 regVal 哈希的键?

perl hash package
2个回答
0
投票

如果变量定义为

our %regVal = (

那你就不能轻率地将

%
改成
$

print Dumper(\%P4site::regVal);

foreach my $branches (sort keys %P4site::regVal)
{
    print "$branches is bracnhes\n";
}

0
投票

问题是你失踪了

package P4site;

在你的模块中。您的代码可以使用此添加。


虽然有效,但请注意,

%{$P4site::{regVal}}
是实现你想要的东西的真正奇怪的方式。您通过符号表的全局变量间接访问该变量。如果你不知道这意味着什么,那就表明它有多么奇怪。您应该使用
%P4site::regVal
来代替。


关于你的第二个问题,

%{ $P4site::regVal{wint}{Noida}{activeRelease} }

$P4site::regVal{wint}{Noida}{activeRelease}->%*

有两种获取所需哈希值的方法。您可以将这些提供给

keys


其他改进:

  • 您应该使用
    $RealBin
    (来自 FindBin)而不是
    $Bin
    以避免符号链接问题
© www.soinside.com 2019 - 2024. All rights reserved.