あなたが欲しいのはこれです:
$ref = [ 1, 2 ];
あなたのコードで:
$ref = \(1,2);
右側が行うことは、配列への参照ではなく、参照のリストを作成することです。これと同じです:
$ref = ( \1, \2 );
そのリストをスカラーに割り当てているため、最後のアイテムを除くすべてが破棄 $ref
され、スカラー値 2 への参照に設定されますが、これはおそらくあなたが望むものではありません。
を参照してくださいperldoc perlref
。
この動作は、サブルーチン呼び出しなどの非リテラル値でも一貫していることに注意してください。次のようにサブを呼び出す場合:
$val = function();
次に、function
サブルーチンはスカラー コンテキストで呼び出され、リスト コンテキストで呼び出された場合とは異なる値を返すことを選択できます。( を参照してくださいperldoc -f wantarray
。) とにかくリストを返すことを選択した場合、リストの最後の要素以外はすべて破棄され、最後の要素が に割り当てられ$val
ます。
sub fun1() { return 1; }
sub fun2() { return (1,2); }
my $f1 = fun1();
my $f2 = fun2();
# $f1 is 1, and $f2 is 2
my $r1 = \( fun1() );
my $r2 = \( fun2() );
# $r1 is a ref to 1, and $r2 is a ref to 2