首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用"\":my_subroutine(%my_hash)通过引用将散列传递给子例程w/o

使用"\":my_subroutine(%my_hash)通过引用将散列传递给子例程w/o
EN

Stack Overflow用户
提问于 2017-02-11 03:14:26
回答 2查看 889关注 0票数 1

如何通过引用将散列传递给子例程,而不使用像\这样的子例程调用表达式中的my_subroutine(%my_hash)字符?

进一步解释:(如果前面的单行问题描述不够)

通过引用子例程传递变量,而在子程序调用表达式(如\ )中不使用my_subroutine($my_var)字符,可以通过如下方式定义子例程来实现:

代码语言:javascript
复制
sub my_subroutine {
    my $var_ref = \shift;
    ...
}

我在散列中尝试过同样的方法,但是它不能正常工作:

代码语言:javascript
复制
sub my_subroutine {
    my $hash_ref = \shift;
    ...
}

我认为这是因为perl片段在列表(一维数组)(即@_ )中的哈希键-值对中传递的任何值对,对传入数组也是一样的(但对于值,只有键)。

我正在寻找一种解决办法,使my_subroutine(%my_hash)在每次调用子例程时都通过反斜杠字符\,通过引用传递散列,而无需在子程序参数(散列)之前使用反斜杠。这将有助于使我的主要代码看起来更整洁,让杂乱无章的查找子程序的内部。另外,如果我与一大群开发人员一起工作,可能有人会忘记添加引用字符。我需要在子例程中设置(散列总是通过引用my_subroutine传递),而不是由调用my_subroutine的其他开发人员。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-11 03:34:21

Prototypes may still considered bad,但您可以在这里使用它们来实现您的目标。

代码语言:javascript
复制
sub my_subroutine (\%) {
    my $hashref = shift;
    ...
}

my_subroutine(%hash);

对于原型,子例程的第一个参数被强制为散列引用。

注意,在子例程中,哈希作为哈希引用接收。您还需要使用命名的散列调用子例程。

代码语言:javascript
复制
my_subroutine( { "anonymous" => "hash", "not" => "OK" } );  # not OK with proto
票数 5
EN

Stack Overflow用户

发布于 2017-02-11 03:26:58

像这样的事怎么样:

代码语言:javascript
复制
#!/usr/bin/perl
use warnings;
use strict;
use Data::Printer;

my %h1 = ( a => 10, b => 20);
mySub(%h1);

sub mySub {
    my ($h1) = {@_};
    p $h1;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42171774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档