4

$aが配列参照になるのはなぜですか? 私はそれに何も押し付けていません。

perl -MData::Dumper -e 'use strict; 1 for @$a; print Dumper $a'
$VAR1 = [];
4

4 に答える 4

8

これは、forループが の内容を@$a左辺値 (割り当て可能なもの) として扱うためです。forは、配列の内容を にエイリアスすることを思い出してください$_。でエイリアス可能なコンテンツを探す行為は、@$aエイリアスするコンテンツがない場合でも、自動有効化を引き起こすのに十分であるようです。

このエイリアシングの効果も一貫しています。以下も自動活性化につながります。

  • map {stuff} @$a;
  • grep {stuff} @$a;
  • a_subroutine( @$a);

自動有効化を管理したい場合は、同名のプラグマを使用して字句制御を行うことができます。

于 2010-02-05T17:55:01.093 に答える
3

値が undef であるスカラー変数を何らかの参照として扱う場合、Perl はその値を使用しようとした参照型にします。この場合、$aの値は undef であり、 を使用する場合は@$a、配列参照を自動有効化する$a必要があるため、配列参照として逆参照できます。

于 2010-02-05T12:21:19.310 に答える
0

$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.
于 2011-04-27T19:47:20.550 に答える
0

$aPerl のautovivification機能により、ARRAY リファレンスになります。

于 2010-02-05T11:34:49.207 に答える