神秘化Perl glob(*)
在
this question年,海报问如何做到以下一行:
sub my_sub { my $ref_array = shift; my @array = @$ref_array; } 通过我对基本Perl魔法的了解,我将通过简单的使用以下方式避免: sub my_sub { my $ref_array = shift; for (@$ref_array) { #do somthing with $_ here }; #use $ref_array->[$element] here } 然而在this answer年,SO的当地僧侣tchrist建议: sub my_sub { local *array = shift(); #use @array here } 当我问
我被建议要求它作为一个新的职位,虽然他给了很好的参考。无论如何,这里呢?有人可以解释什么被分配到什么以及如何来得到@array创建,而不是%array或$ array?谢谢。 解决方法
分配给球
*glob = VALUE 包含一些取决于VALUE类型的魔术(即,返回值,例如Scalar :: Util :: reftype(VALUE))。如果VALUE是对标量,数组,散列或子例程的引用,则只会覆盖符号表中的该条目。 这个成语 local *array = shift(); #use @array here 当子例程的第一个参数是数组引用时,可以作为文档。如果第一个参数是相反的,比如说一个标量引用,那么只有$ array而不是@array会受到赋值的影响。 一个小的演示脚本来看看发生了什么: no strict; sub F { local *array = shift; print "@array = @arrayn"; print "$array = $arrayn"; print "%array = ",%array,"n"; print "------------------n"; } $array = "original scalar"; %array = ("original" => "hash"); @array = ("orignal","array"); $foo = "foo"; @foo = ("foo","bar"); %foo = ("FOO" => "foo"); F ["new","array"]; # array reference F "new scalar"; # scalar reference F {"new" => "hash"}; # hash reference F *foo; # typeglob F 'foo'; # not a reference,but name of assigned variable F 'something else'; # not a reference F (); # undef 输出: @array = new array $array = original scalar %array = originalhash ------------------ @array = orignal array $array = new scalar %array = originalhash ------------------ @array = orignal array $array = original scalar %array = newhash ------------------ @array = foo bar $array = foo %array = FOOfoo ------------------ @array = foo bar $array = foo %array = FOOfoo ------------------ @array = $array = %array = ------------------ @array = orignal array $array = original scalar %array = originalhash ------------------ 在 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |