以下是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 哈希的键?
如果变量定义为
our %regVal = (
那你就不能轻率地将
%
改成$
。
print Dumper(\%P4site::regVal);
foreach my $branches (sort keys %P4site::regVal)
{
print "$branches is bracnhes\n";
}
问题是你失踪了
package P4site;
在你的模块中。您的代码可以使用此添加。
虽然有效,但请注意,
%{$P4site::{regVal}}
是实现你想要的东西的真正奇怪的方式。您通过符号表的全局变量间接访问该变量。如果你不知道这意味着什么,那就表明它有多么奇怪。您应该使用 %P4site::regVal
来代替。
关于你的第二个问题,
%{ $P4site::regVal{wint}{Noida}{activeRelease} }
和
$P4site::regVal{wint}{Noida}{activeRelease}->%*
有两种获取所需哈希值的方法。您可以将这些提供给
keys
。
其他改进:
$RealBin
(来自 FindBin)而不是 $Bin
以避免符号链接问题