我如何通过引用子例程来传递哈希,而不使用\
子例程调用表达式中的字符my_subroutine(%my_hash)
?
更多解释 :( 如果以前的单行问题不够具有描述性)
通过引用变量通过引用子例程而不使用\
子例程调用表达式中的字符,my_subroutine($my_var)
可以通过定义子例程来实现:
sub my_subroutine {
my $var_ref = \shift;
...
}
Run Code Online (Sandbox Code Playgroud)
我已尝试使用哈希相同的方法,但它无法正常工作:
sub my_subroutine {
my $hash_ref = \shift;
...
}
Run Code Online (Sandbox Code Playgroud)
我认为这是因为perl片段在列表(一维数组)中传递哈希的键 - 值对,这@_
也与传入的数组相同(但是对于不使用键的值).
我正在寻找一个解决方法,使得每次调用子程序时都my_subroutine(%my_hash)
需要通过反斜杠字符在我的子程序参数(哈希)之前进行传递哈希引用\
.这将有助于使我的主代码看起来更整洁,并让不整洁的内容看到子程序的内部.此外,如果我与一大群开发人员合作,有人可能会忘记添加引用字符.我需要在子例程中设置(哈希总是通过引用my_subroutine传递)而不是由调用my_subroutine的其他开发人员设置.
原型可能仍然被认为是坏的,但您可以在这里使用它们来实现您的目标.
sub my_subroutine (\%) {
my $hashref = shift;
...
}
my_subroutine(%hash);
Run Code Online (Sandbox Code Playgroud)
使用原型,子例程的第一个参数被强制为哈希引用.
请注意,在子例程内部,哈希作为哈希引用被接收.您还需要使用命名散列调用子例程.
my_subroutine( { "anonymous" => "hash", "not" => "OK" } ); # not OK with proto
Run Code Online (Sandbox Code Playgroud)