ダブルクォート文字列
ダブルクォート文字列は、ダブルクォート「"」で囲まれた文字列のことです。変数展開を行えることと、改行やタブなどのダブルクォート文字列のエスケープシーケンスを使えることが特徴です。
my $name = "Yuki Kimoto"; # 変数展開と改行文字を使う my $message = "I'm $name\n"; # 「I'm Yuki Kimoto」と表示される。改行あり print $message;
変数展開とは
変数展開とは、文字列の中で、変数の内容を展開できる機能のことです。
my $name = "Yuki Kimoto"; # 変数展開と改行文字を使う my $message = "I'm $name\n";
変数名の区切りを明確にしたい場合は、シジル「$」を除いた変数名を「{}」で囲むことで明示できます。
my $name = "Yuki Kimoto"; # 変数名を明示する my $message = "I'm ${name}_foo\n";
詳しくは、変数展開の記事で解説しています。
ダブルクォート文字列のエスケープシーケンス
ダブルクォート文字列の中で使えるエスケープシーケンスを紹介します。
利用頻度が高いものは改行「\n」、タブ「\t」、ダブルクォート「\"」、バックスラッシュ自体「\\」です。
エスケープシーケンス | 意味 |
---|---|
\n | 改行 |
\t | タブ |
\" | " |
\\ | \ |
「\x」で始めることによって、ASCIIコード自体を記述できるエスケープシーケンスもあります。
# ASCIIコードを直接指定して改行を表現 my $message = "Hello\x0D\x0A"; print $message;
上記の例はHTTPプロトコルにおける改行コードがASCIIの16進数で「D」「A」の並びなので、それを表現したサンプルです。「\x」の後ろの0は、必須ではありませんが、ASCIIコードを2桁の16進数で表現する慣習に従って、0を入れています。
詳しくは、ダブルクォート文字列のエスケープシーケンスの記事で解説しています。
正規表現リテラルとの関係
ダブルクォート文字列の変数展開やエスケープシーケンスは、正規表現リテラルの中でも、そのまま使うことができます。
my $name = "Yuki Kimoto"; my $message = "I'm Yuki Kimoto\tHello"; # 正規表現リテラルの中でも変数展開とエスケープシーケンスが使える if ($message =~ /$name\t/) { }
Perlのテキスト処理が便利な理由のひとつは、正規表現リテラルの中で、ダブルクォート文字列の変数展開とエスケープシーケンスが、そのまま使えることです。
変数展開を使う頻度はそれほど高くありませんが、正規表現リテラルがダブルクォート文字列の自然な拡張であるという点が、自然に利用できる体感となっていると感じています。
Perlでは、正規表現が、プログラミング言語機能として組み込まれており、正規表現リテラルも言語機能の一つとして、実装されています。