我无法理解引用如何与子哈希中的哈希一起使用。
在此代码中,我尝试更改%config
子例程中的handleOptions()
:
sub handleOption;
my %config = ( gpg => "",
output => "",
pass => "",
host => "",
type => "");
handleOptions(\%config);
print "\n";
print Dumper \%config;
sub handleOptions
{
my ($gpgpath,$type,$pass,$host);
my $pConfig=@_;
GetOptions ("gpg=s" => \$gpgpath,
"type=s" => \$type,
"host=s" => \$type,
"pass=s"=>\$pass);
$pConfig->{'gpg'} = $gpgpath;
$pConfig->{'type'} = $type;
$pConfig->{'pass'} = $pass;
$pConfig->{'host'} = $host;
print Dumper %$pConfig;
}
当我将--gpg='/home/daryl/gpg/pass.gpg
提供给cli:
$VAR1 = 'pass';
$VAR2 = undef;
$VAR3 = 'gpg';
$VAR4 = '/home/daryl/gpg/pass.gpg';
$VAR5 = 'type';
$VAR6 = undef;
$VAR7 = 'host';
$VAR8 = undef;
$VAR1 = {
'pass' => '',
'gpg' => '',
'type' => '',
'output' => '',
'host' => ''
};
我该怎么办?
答案 0 :(得分:4)
如果您访问use strict
和use warnings
,则会看到有关使用标量作为哈希引用的错误消息。那会让你觉得问题出在这一行:
my $pConfig=@_;
您正在为变量@_
分配数组$pConfig
的标量上下文。这意味着$pConfig
正在存储数组@_
中的元素数量。
相反,您可以这样做:
my ($pConfig) = @_;
正如KerrekSB建议的那样,或者:
my $pConfig = shift;
(自shift
@_
来自<{1}}
有关在标量上下文中调用非标量的更多信息,请查看perldoc perldata
。此外,除非您正在编写单行或短暂删除脚本,否则请务必始终use strict
和use warnings
。