为什么Perl严格不允许我传递参数哈希?
发布时间:2020-12-15 23:30:19 所属栏目:大数据 来源:网络整理
导读:我有一个perl子例程,我想将参数作为哈希传递 (目的是根据参数’iconsize’包含一个css). 我正在使用电话: get_function_bar_begin('iconsize' = '32'); 对于子程序get_function_bar_begin: use strict;...sub get_function_bar_begin{ my $self = shift; m
我有一个perl子例程,我想将参数作为哈希传递
(目的是根据参数’iconsize’包含一个css). 我正在使用电话: get_function_bar_begin('iconsize' => '32'); 对于子程序get_function_bar_begin: use strict; ... sub get_function_bar_begin { my $self = shift; my %template_params = %{ shift || {} }; return $self->render_template('global/bars /tmpl_incl_function_bar_begin.html',%template_params); } 为什么会产生错误消息: 执行运行模式’start’时出错:undef error – 无法使用字符串(“iconsize”)作为HASH参考,而在334行CheckBar.pm使用“strict refs”时 我在这里做错了吗? (我还是Perl的新手) 编辑:解决方案对我有用.我没有改变电话,但是我的功能: sub get_function_bar_begin { my $self = shift; my $paramref = shift; my %params = (ref($paramref) eq 'HASH') ? %$paramref : (); my $iconsize = $params{'iconsize'} || ''; return $self->render_template('global/bars/tmpl_incl_function_bar_begin.html',{ 'iconsize' => $iconsize,} ); } 解决方法
您正在参数列表的第一个参数上使用散列解除引用运算符(%{}).但是这个参数不是哈希引用,它只是字符串’iconsize’.您可以通过以下两种方式之一做您想做的事:
传递匿名哈希引用: get_function_bar_begin( { 'iconsize' => '32' } ); 或者继续传递正常列表,就像现在一样,并相应地更改您的功能: sub get_function_bar_begin { my $self = shift; my %template_params = @_; } 请注意,在这个版本中,我们只是将参数列表直接分配给哈希(在提取$self之后).这是因为name =>列表值对只是正常列表的语法糖. 我更喜欢第二种方法,因为没有特别好的理由构造匿名hashref,然后立即取消引用它. 在这篇文章中还有一些关于它如何工作的好信息:Object-Oriented Perl constructor syntax. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |