小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

Perlで同名の$aaa[0]と@aaa[0]は別物か?

$aaa[0]は、配列変数@aaaのゼロ番目の要素の値と同じ物です。
では、@aaa[0]は、何かというと『($aaa[0])』にイコールで、@aaaのゼロ番目の要素を指定するスライスです。
ということで、$aaa[0]と@aaa[0]は、ほぼ同じ物なのですが、でも別物です。
あくまでも、$aaa[0]はスカラー変数で、@aaa[0]は配列変数なのです。
以下にその同じと違いを示します。

@array = ("11111", "22222", "3333");

#同じケース
$a = @array[1];
$b = $array[1];
print "\$a=$a \$b=$b \n";  # $a=2222 $b=2222 が表示される。

#違うケース
@array[1] = ("aaa", "bbb", "ccc");
print "\@array[1]=@array[1] \n";   
# @array[1]=aaa が表示される。(リストコンテキストでのスライスがミソ)。
# @array[1]は、スライスの($array[1])とイコールで、上記は以下と同じなのです。
($array[1]) =  ("aaa", "bbb", "ccc");
#よって、一番目の"aaa"が格納されます。
#ちなみに、スライスとは、配列の複数(単数含む)の要素にアクセスすること。

$array[1] = ("aaa", "bbb", "ccc");
print "\$array[1]=$array[1] \n";   
# $array[1]=ccc が表示される(スカラーコンテキストでのカンマ演算子がミソ)。
#カンマ演算子は左から右に評価していき、最後に残った"ccc"が格納されます。