ダブルクォート文字列のエスケープシーケンス
ダブルクォート文字列の中で使えるエスケープシーケンスを紹介します。
ASCIIコードに対応するエスケープシーケンス
利用頻度が高いものは改行「\n」、タブ「\t」です。
エスケープ シーケンス | コード ポイント 10進数 | コード ポイント 16進数 | ASCII | 意味 |
---|---|---|---|---|
\a | 7 | 07 | BEL | アラームかベル |
\b | 8 | 08 | BS | バックスペース |
\e | 27 | 1B | ESC | エスケープシーケンス |
\f | 12 | 0C | FF | フォームフィード |
\n | 10 | 0A | LF | ラインフィード |
\r | 13 | 0D | CR | キャリッジリターン |
\t | 9 | 09 | TAB | タブ |
タブと改行のエスケープシーケンスを使ったサンプルです。
# タブと改行を使う my $line = "ID\tName\tPrice\n";
ときどき使うエスケープシーケンス
ダブルクォート「\"」、バックスラッシュ自体「\\」を表すエスケープシーケンスも時々使います。
エスケープ シーケンス | 意味 |
---|---|
\" | " |
\\ | \ |
改行「\n」に関する注意点
改行「\n」に関する注意点が一つあります。
プログラムのソースコード上では「\n」は、一文字でありASCIIコードの「LF」、16進数で「0A」を表現します。これは、Linx/Unixの改行コードと一致します。
ひとつ注意しなければならないことは、PerlのI/Oレイヤーによって、標準出力やファイルに出力する場合に、自動的にOSの改行コードに変換されることです。
「\n」はWindowsでは「0D 0A」という二文字の改行コードに変換されます。Unix/Linux/macOSでは、変換されずに「0A」です。
# Windowsでは「0D 0A」、Unix/Linux/Macでは「0A」になる print "Hello\n";
この変換を行わないようにするには、直接ASCIIコードを指定するエスケープシーケンスを使用します。ASCIIコードを直接指定する方法は、以下で解説しています。
ASCIIコードを直接記述するエスケープシーケンス
「\x」で始めることによって、ASCIIコード自体を16進数で記述できるエスケープシーケンスもあります。
# ASCIIコードを16進数で直接指定してHTTPプロトコルの改行を表現 my $message = "Hello\x0D\x0A"; print $message;
上記の例はHTTPプロトコルにおける改行コードがASCIIの16進数で「D」「A」の並びなので、それを表現したサンプルです。「\x」の後ろの0は、必須ではありませんが、ASCIIコードを2桁の16進数で表現する慣習に従って、0を入れています。
すべてのエスケープシーケンスが掲載されたドキュメント
すべてのエスケープシーケンスが掲載されたPerlのドキュメントは以下です。
正規表現のエスケープシーケンスのすべての解説になっていますが、ダブルクォート文字列のエスケープシーケンスは、正規表現のエスケープシーケンスに含まれますので、ダブルクォート文字列に関する部分のエスケープシーケンスだけを参照しましょう。