燈明ブログ

現状は小池啓仁の応援ブログ

Perlの謎(その9):Perlでの文字列

VB系とかDOSコマンド系での文字列はダブルクォーテーションです。
また、SQL系での文字列は、シングルクォーテーションです。


Perlでの文字列は、上記両方です。
違いは、ダブルクォーテーションでは変数が展開され、シングルクォーテーションでは展開されません。
また、qクォート演算子とqqクォート演算子も同じ関係で文字列を表します。

my $strdata1 = '文字列1';
my $strdata2 = "文字列2 $strdata1";
my $strdata3 = q{文字列3};
my $strdata4 = qq{文字列4 $strdata3};
print $strdata1, "\n";  # 文字列1
print $strdata2, "\n";  # 文字列2 文字列1
print $strdata3, "\n";  # 文字列3
print $strdata4, "\n";  # 文字列4 文字列3


あと、qwクォート演算子を使うと文字列のリストの入力が楽になりますね。

my @strlist1 = ('文字列1',  '文字列2', '文字列3');
my @strlist2 = qw{文字列1 文字列2 文字列3};         # 上と等価(ただし、スペースが文字列中にあるときはNG)
print "@strlist1", "\n"; # 文字列1 文字列2 文字列3 
print "@strlist2", "\n"; # 文字列1 文字列2 文字列3

◆補足1:ダブルクォート文字列での特殊文字のエスケープ

たとえば、ダブルクォート文字列にダブルクォートを記述する場合は、その前に \ を置いてエスケープします。

  • \" ダブルクォーテーション( " )のエスケープ
  • \$ ダラー( $ )のエスケープ
  • \\ エスケープのエスケープ
  • \@ アットマーク( @ )のエスケープ
  • \% パーセント( % )のエスケープ
  • \; セミコロン( ; )のエスケープ

尚、シングルクォート文字列の中でのシングルクォート( ' )のエスケープは( \' )とします。

◆補足2:ダブルクォート文字列で展開される \ による文字エスケープ

以下は、ダブルクォート文字列の中で各々の意味(制御コード)に展開されます。

  • \t タブ
  • \n 改行
  • \r リターン
  • \f 改ページ
  • \b バックスペース
  • \a アラーム
  • \e エスケープ
  • \003 8進数
  • \x1b 16進数
  • \cC CTRL-C
  • \l 次の文字を小文字
  • \u 次の文字を大文字
  • \L \E が来るまで小文字
  • \U \E が来るまで大文字
  • \Q \E が来るまで非英数字の前に \ を追加
  • \E \L、\U、\Qの効果を終了する