加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

调用子例程时perl autovivification

发布时间:2020-12-16 06:21:46 所属栏目:大数据 来源:网络整理
导读:调用程序时为什么自动生效不起作用?在这种情况下有没有办法禁止它? #!/usr/bin/env perlno autovivification;use Data::Dumper;sub testsub { }my $task;print Dumper($task); # $VAR1 = undef;my $a = $task-{parent_id};print Dumper($task); # $VAR1 =
调用程序时为什么自动生效不起作用?在这种情况下有没有办法禁止它?

#!/usr/bin/env perl
no autovivification;
use Data::Dumper;

sub testsub { }

my $task;
print Dumper($task);    # $VAR1 = undef;
my $a = $task->{parent_id};
print Dumper($task);    # $VAR1 = undef;
my $b = testsub($task->{parent_id});
print Dumper($task);    # $VAR1 = {};

解决方法

my $task
print Dumper($task)

此时,perl不知道自动生成什么.它将$task的LVALUE引用传递给Dumper,后者对该引用没有任何作用,因此没有任何反应

my $a = $task->{parent_id}

因为这是副本,所以它被视为RVALUE.因此不需要活泼.

my $b = testsub($task->{parent_id})

要使用LVALUE引用正确填充@_,perl现在必须创建哈希,以便它可以正确传入引用.

为避免这样做,您可以传入对$task的引用,然后在必要时访问parent_id:

sub testsub { my $task_ref = shift; if (something) { $$task_ref->{parent_id} = 3 } }
my $b = testsub($task);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读