Perlゼミ

  1. Perl
  2. 構文
  3. 文字列
  4. here

ダブルクォート文字列のエスケープシーケンス

ダブルクォート文字列の中で使えるエスケープシーケンスを紹介します。

ASCIIコードに対応するエスケープシーケンス

利用頻度が高いものは改行「\n」、タブ「\t」です。

エスケープ
シーケンス
コード
ポイント
10進数
コード
ポイント
16進数
ASCII意味
\a707BELアラームかベル
\b808BSバックスペース
\e271BESCエスケープシーケンス
\f120CFFフォームフィード
\n100ALFラインフィード
\r130DCRキャリッジリターン
\t909TABタブ

タブと改行のエスケープシーケンスを使ったサンプルです。

# タブと改行を使う
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のドキュメントは以下です。

正規表現のエスケープシーケンスのすべての解説になっていますが、ダブルクォート文字列のエスケープシーケンスは、正規表現のエスケープシーケンスに含まれますので、ダブルクォート文字列に関する部分のエスケープシーケンスだけを参照しましょう。

Perlプログラミングちゃんねるのご紹介

Perlの書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「今日も元気だ! Perlで元気!」

Perlプログラミングちゃんねる

Youtubeチャンネル登録、いいね、コメント歓迎

Twitter
フォロー、いいね、リツート、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

Perl総合研究所