perl在sub中修改hash
我很难理解subs中引用如何与哈希一起工作 在这段代码中,我尝试在perl在sub中修改hash,perl,pointers,reference,hashtable,Perl,Pointers,Reference,Hashtable,我很难理解subs中引用如何与哈希一起工作 在这段代码中,我尝试在handleOptions()子例程中更改%config: sub handleOption; my %config = ( gpg => "", output => "", pass => "", host => "", type => ""); handleOpti
handleOptions()
子例程中更改%config
:
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;
}
下面是我给cli中的选项指定--gpg='/home/daryl/gpg/pass.gpg
时的输出:
$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' => ''
};
如何继续?如果要
使用strict
和使用warnings
,您会看到一条关于使用标量作为哈希引用的错误消息。这会提示您问题出在这一行:
my $pConfig=@_;
您正在为变量$pConfig
分配数组@
的标量上下文。这意味着$pConfig
正在存储数组中的元素数@
相反,您可以执行以下操作:
my($pConfig)=@代码>如KerrekSB建议,或:
my$pConfig=shift代码>(自动从@
移动)
有关在标量上下文中调用非标量的更多信息,请参阅。此外,除非您正在编写一行或一个简短的一次性脚本,否则请确保始终使用strict
和使用warnings
如果要使用strict
和使用warnings
,您会看到一条关于将标量用作哈希引用的错误消息。这会提示您问题出在这一行:
my $pConfig=@_;
您正在为变量$pConfig
分配数组@
的标量上下文。这意味着$pConfig
正在存储数组中的元素数@
相反,您可以执行以下操作:
my($pConfig)=@代码>如KerrekSB建议,或:
my$pConfig=shift代码>(自动从@
移动)
有关在标量上下文中调用非标量的更多信息,请参阅。此外,除非您正在编写一行或一个简短的一次性脚本,否则请确保始终使用strict
和使用warnings
尝试以下操作:my($pConfig)=@代码>完美演示始终使用严格和警告的价值。使用严格;使用警告代码>不会帮助他解决子程序声明不匹配的问题;使用警告在perl代码中。当将参数传递给函数时,以以下方式接收:my($arg1,$arg2,@garbage)=@代码>@TLP通过“子程序声明不匹配”我指的是子操作代码>声明与子例程本身的名称不匹配。请尝试以下操作:my($pConfig)=@代码>完美演示始终使用严格和警告的价值。使用严格;使用警告代码>不会帮助他解决子程序声明不匹配的问题;使用警告在perl代码中。当将参数传递给函数时,以以下方式接收:my($arg1,$arg2,@garbage)=@代码>@TLP通过“子程序声明不匹配”我指的是子操作代码>声明与子例程本身的名称不匹配。非常感谢您解决了我的问题:)我对perl非常陌生,我仍然经常忘记设置这些“严格/警告”lines@Azryel-不客气。我建议您选择一本相对较轻的书来阅读,这本书可以帮助您启动和运行,和/或是一本更厚但更全面的书。非常感谢您解决了我的问题:)我对perl非常陌生,我仍然经常忘记设置这些“严格/警告”lines@Azryel-不客气。我建议你选择一本相对较轻的书来阅读,这本书会让你振作起来,并且/或者是一本更厚的书,但是更全面。