Kon*_*kar 4 perl autovivification
调用程序时为什么自动生效不起作用?在这种情况下有没有办法禁止它?
#!/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 = {};
Run Code Online (Sandbox Code Playgroud)
my $task
print Dumper($task)
Run Code Online (Sandbox Code Playgroud)
此时,perl不知道自动生成什么.它将$ task的LVALUE引用传递给Dumper,后者对该引用没有任何作用,因此没有任何反应
my $a = $task->{parent_id}
Run Code Online (Sandbox Code Playgroud)
因为这是副本,所以它被视为RVALUE.因此不需要活泼.
my $b = testsub($task->{parent_id})
Run Code Online (Sandbox Code Playgroud)
要@_
使用LVALUE引用正确填充,perl现在必须创建哈希,以便它可以正确传入引用.
为避免这样做,您可以传入引用$task
,然后parent_id
在必要时访问内部:
sub testsub { my $task_ref = shift; if (something) { $$task_ref->{parent_id} = 3 } }
my $b = testsub(\$task);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
76 次 |
最近记录: |