ハッシュ要素の変数展開

広告

ダブルクォーテーションで囲まれた文字列中に配列が含まれていると、配列の要素がスペースで区切られて展開されました。ではハッシュの場合はどうかと言うとハッシュ全体を表す「%ハッシュ名」のような記述を行っても展開はされません。

my %address = (
"鈴木" => "東京都千代田区",
"山田" => "東京都葛飾区"
);

print "%address¥n";

上記の場合は単に「%address」と言う文字列が出力されます。

このようにハッシュ全体を文字列の中で変数展開する手段は用意されていません。ただ、ハッシュの要素1つ1つは変数ですので、ハッシュの要素をダブルクォーテーションで囲まれた文字列の中に記述した場合は他の変数と同じく変数展開されます。

my %address = (
"鈴木" => "東京都千代田区",
"山田" => "東京都葛飾区"
);

print "$address{'鈴木'}¥n";

上記の場合は「東京都千代田区」と言う文字列が出力されます。

サンプルプログラム

では簡単なプログラムで確認して見ます。

test4-1.pl

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my %address = (
"鈴木" => "東京都千代田区",
"山田" => "東京都葛飾区"
);

print "%address¥n";
print "$address{'鈴木'}¥n";

上記を「test4-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。

文字列中に含まれるハッシュの変数展開

( Written by Tatsuo Ikura )