文字列中の変数展開
文字列を定義するにはダブルクオーテーション(")で囲う方法とシングルクオーテーション(')で囲う方法の2つの方法があることは既に解説しました。
"こんにちは" 'お元気ですか'
この中でダブルクオーテーションで囲っている場合には、文字列の中に変数を記述することで、変数が記述された位置に変数に格納された値を置き換えさせることが出来ます。
my $name = "加藤"; print "こんにちは $name さん";
上記では画面に「こんにちは 加藤 さん」と言う文字列が出力されます。ダブルクオーテーションで囲まれた文字列の中に記述された変数が、変数に格納されている値に置き換えられるためです。
これは次のように文字列の連結を使って記述した場合と同じです。
$name = "加藤"; print "こんにちは ".$name." さん";
今度の場合は「こんにちは」と変数「$name」と「さん」の3つが連結されて変数「$msg」に格納されることになります。記述方法としては間違いではありませんが文字列中に直接変数を記述した方が簡潔に記述することが出来ます。
文字列中の変数展開が行われるのはダブルクオーテーションで囲まれた文字列だけです。シングルクオーテーションで囲まれた文字列の中に変数を記述しても、それは単なる文字として扱われるので変数とは認識されません。
my $name = "加藤"; print 'こんにちは $name さん';
上記では画面に「こんにちは $name さん」と言う文字列が出力されます。
サンプルプログラム
では実際に試してみます。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my $name = "加藤"; print "こんにちは $name さん¥n"; print "こんにちは ".$name." さん¥n"; print 'こんにちは $name さん'."¥n"; print 'こんにちは '.$name.' さん'."¥n";
上記を「test8-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
ダブルクオーテーションで囲まれた文字列の場合は変数の値が展開されているのに対して、シングルクオーテーションで囲まれた文字列の場合は変数の展開がされていないことが確認できます。なおどちらの場合も文字列の連結を行った場合は同じ結果です。
( Written by Tatsuo Ikura )