以下のようなコードがあったとします。$hashref;上のサンプルコードの出力は以下のようになります。undef};マテマテマテマテって思うかもしれませんが、perlのバグなどではなく正常な挙動です。コンテキストPerlにはコンテキストと呼ばれる概念があります。これは、値の解釈によって処理を変えるための概念です。詳しい説明は初めてのPerl*1を読むか、こことかこことかを読むと良いかもしれません。Perlは値をスカラーコンテキストで評価する場合とリストコンテキストで評価する場合があり、それぞれで処理内容が変わる場合があります。変数への代入の場合はスカラー型の変数への代入の場合は値をスカラーコンテキストで評価します。'zzz'アレイ型/ハッシュ型変数への代入の場合は値をリストコンテキストで評価します。}また、更に変な書き方として、リストの中にリストを含む事も出来ます。これは結合され1つのリストとして解釈されます。'bbb')ハッシュ内では値はリストコンテキストで評価します。上の何も返さない関数の場合、空のリストとして解釈されてキーがズレてしまうのです。}この場合、ほぼプログラマの思い通りの挙動にはならないでしょう。上のコード類を実行してみた人は以下のような警告が出るのに気づいたかもしれません。assignmentこれはハッシュとして与えたリストが奇数だった場合に警告してくれています。上のような間違ったコードを書いてしまっている場合がある事を危惧して(かどうかは知りませんが)教えてくれているのです。警告は/dev/nullには決して捨てたりせずに*2、不可解な挙動が起こった場合は警告も含め怪しいメッセージが出ていないか確認するとよいでしょう。Entries最近の人気記事Archiveはてなブログをはじめよう!karupaneruraさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。