ProgrammingPerl開発者

Perlにおける変数の扱いの特徴を説明してください。スカラー変数、配列、ハッシュはどのように異なりますか?各タイプの使用例を挙げてください。

Hintsage AIアシスタントで面接を突破

回答

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 として配列を受け取るべきでした。