$a
が配列参照になるのはなぜですか? 私はそれに何も押し付けていません。
perl -MData::Dumper -e 'use strict; 1 for @$a; print Dumper $a'
$VAR1 = [];
$a
が配列参照になるのはなぜですか? 私はそれに何も押し付けていません。
perl -MData::Dumper -e 'use strict; 1 for @$a; print Dumper $a'
$VAR1 = [];
これは、for
ループが の内容を@$a
左辺値 (割り当て可能なもの) として扱うためです。for
は、配列の内容を にエイリアスすることを思い出してください$_
。でエイリアス可能なコンテンツを探す行為は、@$a
エイリアスするコンテンツがない場合でも、自動有効化を引き起こすのに十分であるようです。
このエイリアシングの効果も一貫しています。以下も自動活性化につながります。
map {stuff} @$a;
grep {stuff} @$a;
a_subroutine( @$a);
自動有効化を管理したい場合は、同名のプラグマを使用して字句制御を行うことができます。
値が undef であるスカラー変数を何らかの参照として扱う場合、Perl はその値を使用しようとした参照型にします。この場合、$a
の値は undef であり、 を使用する場合は@$a
、配列参照を自動有効化する$a
必要があるため、配列参照として逆参照できます。
$a と $b は Perl の特別な変数 (ソートで使用) であり、独自の特別なスコープを持ちます。
perl -MData::Dumper -e 'use strict; 1 for @$c; print Dumper $c'
生産する
Global symbol "$c" requires explicit package name at -e line 1.
Global symbol "$c" requires explicit package name at -e line 1.
Execution of -e aborted due to compilation errors.
$a
Perl のautovivification機能により、ARRAY リファレンスになります。