文字列の変数展開と変数展開時の変数名と文字列の区切り

文字列の中に変数を記述すると、あたかも変数が記述された位置に変数に格納されている値が記述されているように扱われます。これを文字列中の変数展開といいます。ここでは Perl のプログラムにおける文字列の変数展開、そして変数展開するときに変数名と他の文字列との区切りの仕方について解説します。

(Last modified: )

文字列の変数展開について

文字列をプログラムの中で記述する場合、ダブルクオーテーション(")で囲う方法とシングルクオーテーション(')で囲う方法の2つの方法があります。

"こんにちは"
'お元気ですか'

文字列をダブルクオーテーションで囲っている場合、文字列の中に変数を記述すると、変数が記述された位置に変数に格納された値を置き換えさせることができます。

my $name = "加藤";
print "こんにちは $name さん";

上記では画面に "こんにちは 加藤 さん" と言う文字列が出力されます。ダブルクオーテーションで囲まれた文字列の中に記述された変数が、変数に格納されている値に置き換えられるためです。

これは次のように文字列の連結を使って記述した場合と同じです。

$name = "加藤";
print "こんにちは ".$name." さん";

この場合は "こんにちは" と変数 $name と "さん" の 3 つが連結された文字列が画面に出力されることになります。どちらの方法でも結果は変わりませんが、変数展開を使った方が完結に記述できます。

文字列の変数が変数展開されるのは、文字列がダブルクオーテーションで囲まれている場合だけだけです。シングルクオーテーションで囲まれた文字列の中に変数を記述しても、それは単なる文字として扱われるので変数とは認識されません。次の例を見てください。

my $name = "加藤";
print 'こんにちは $name さん';

この場合、文字列の中の "$name" は特別な意味はなく、単なる文字列でしかないので、実行すると画面には "こんにちは $name さん" と出力されます。

変数展開するときの変数名と文字列の区切りについて

文字列の中で変数展開を行う場合、変数名のすぐあとにアルファベットなどの文字列が続く場合には注意が必要です。次の例をみてください。

my $name = "Yamada";
print "Hello,$namesan";

この場合、文字列の中に変数 $name が記述されていますが、すぐあとに "san" という文字列が続いています。その為、変数 $namesan という文字列が記述されているとして処理されます。そして変数 $namesan は宣言されていない変数なのでエラーとなってしまいます。

そこで変数名の直後にアルファベットや数字やアンダーバーが記述されている場合は、どこからどこまでが変数なのかを明確にするために変数名のあとに空白など変数名として使われない文字を追加します。

my $name = "Yamada";
print "Hello,$name san";

ただしこの方法では変数名の直後にアルファベットや数字を記述できません。そこで直後にアルファベットや数字を記述したい場合は変数名を括弧 {} で囲んで記述します。

my $name = "Yamada";
print "Hello,${name}san";

このように記述することで文字列中の含まれる変数が $name であることを明確にすることができます。

サンプルコード

それでは簡単なサンプルを作成します。

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

my $name = "Yamada";
print "Hello,$name san\n";
print "Hello,${name}san\n";
print 'Hello,$name san\n';

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

文字列の変数展開と変数展開時の変数名と文字列の区切り(1)

ダブルクォーテーションで囲まれた文字列の中に変数を記述した場合は、文字列の中で変数が展開されますが、シングルクォーテーションで囲まれた文字列の中に変数を記述しても変数が展開されないことが確認できました。

-- --

Perl のプログラムにおける文字列の変数展開、そして変数展開するときに変数名と他の文字列との区切りの仕方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。