Perlでは、変数はスカラー($)、配列(@)、**ハッシュ(%)**の3種類に分類されます:
スカラー($variable) – 単一の値(文字列、数値)を保持します:
my $name = "Ivan"; my $age = 30;
配列(@array) – 順序付きの要素の集合(数値でインデックスされる):
my @fruits = ("apple", "banana", "cherry"); print $fruits[1]; # banana
ハッシュ(%hash) – キーと値のペアの集合(連想配列):
my %colors = (red => "#ff0000", green => "#00ff00"); print $colors{"red"}; # #ff0000
要素にアクセスする際は、変数のタイプに応じて特定の記号が使用されることに注意してください:
$array[0] — 配列の要素$hash{"key"} — キーによるハッシュの値@array[1,2] と $array[1,2] の違いは何ですか?*回答:
@array[1,2]— 複数の配列要素のリストを提供します(スライス)。$array[1,2]— 不正で、エラーになります。複数の配列要素にアクセスするにはスライス@array[...]だけを使用します。例:
my @array = (10, 20, 30, 40); my @slice = @array[1,2]; # (20, 30)
物語
ロギングプロジェクトで、プログラマーがハッシュの要素に
@colors{"red"}を使ってアクセスした結果、ハッシュの値ではなくランダムなエラーが発生しました。単一の値には$が必要で、@は不適切でした。
物語
あるサービスで、配列のインデックスを反復処理する際に正しいアクセスを忘れ、
$array[$i]の代わりに@array$iを使ったため、警告が発生し不正な結果になりました。
物語
APIプロジェクトで、配列を
$argsとして受け取る関数を記述しましたが、呼び出し時にスカラーなしの配列を渡しました:func(@list)。その結果、配列の要素がリストに「展開」され、関数が期待通りに動作しませんでした。正しくは@argsとして配列を受け取るべきでした。