数値リテラルは、慣習的な浮動小数点数と整数の形式で示されます:
12345 12345.67 .23E-10 0xffff # 16 進数 0377 # 8 進数 4_294_967_296 # 下線は読みやすさのため
文字列リテラルは、シングルクォートかダブルクォートで区切られます。これら は、シェルのクォートと同じように扱われ、ダブルクォートの文字列リテラルで は、バックスラッシュの置換と変数の置換が行なわれ、シングルクォートの文字 列では、("\'" と "\\"を除いて)これらの置換は行なわれません。普通の UNIX でのバックスラッシュの置換規則は、改行やタブを始め、ある種の変わった形式 のためにも使われます。一覧は perlop manpage の qq のところをご覧ください。
また、文字列に直接、改行を埋め込むこともできます。つまり、文字列は、開始 した行で終了する必要はないと言うことです。これは素晴らしいのですが、終了 のクォートを付け忘れた場合には、次にクォート文字が見つかるまでの間、Perl はエラーを見つけることができなくなります。それは、スクリプト上でずっと先 になるかもしれません。文字列中での変数の置換は、スカラ変数と配列と配列の スライスに限定されています。(言い換えれば、$ や@ で始まる識別子か、それ に大括弧で括った添え字をつけたものです。)次のプログラムは "The price is $100." と印字します。
$Price = '$100'; # 置換されない print "The price is $Price.\n"; # 置換される
いくつかのシェルと同じように、識別子の前後に中括弧を入れて、つながってい る英数字から切り離すことができます。また、シングルクォート文字列は、その 前の単語とスペースで区切らなければならないことに注意してください。シング ルクォートが (使わないように言われていますが) 識別子を構成する文字として 有効なものだからです (perlmod manpage のパッケージのところを参照してくだ さい)。
__LINE__
と __FILE__
という 2 つの特別なリテラルがあって、
プログラムのその時点での行番号とファイル名を示します。これらは、独立した
トークンとしてだけ使用することができ、文字列の中に展開することはできませ
ん。さらに、トークン __END__
は、スクリプトを納めたファイルの実際
の最後よりも前で、論理的にスクリプトが終わるとき、その位置を示すのに使う
ことができます。それ以降のテキストは無視されますが、DATA というファイル
ハンドルを通して読むことができます。(ファイルハンドル DATA は、main のス
クリプトからだけ読むことができ、require されたファイルや eval された文字
列からは読めません。)コントロール文字 ^D と ^Z を __END__
の同義
語として使うことができます。
文法的に別の解釈ができない単語は、クォート文字列であるかのように扱われま す。これは「裸の単語」と言われます。ファイルハンドルやラベルと同様に、小 文字だけからなる裸の単語は、将来的に予約後とぶつかる危険がありますから、 そのような単語があった場合、`-w' スイッチをつけることで、Perl がそ の単語を指摘してくれます。裸の単語をなくして欲しいという方もいらっしゃい ます。もし、
use strict 'subs';
と書いておけば、サブルーティンコールと解釈できない裸の単語がコンパイル時
にエラーとなります。この制約は囲っているブロックの終わりまで有効です。内
側のブロックで no strict 'subs'
と書くことで、この機能を撤回する
こともできます。
配列変数は、ダブルクォート文字列中で、配列のすべての要素を変数 $"
中に示す区切文字 (デフォルトはスペース) でつなげて展開されます。以下は同
値です:
$temp = join($",@ARGV); system "echo $temp";
system "echo @ARGV";
検索パターン (ここでも、ダブルクォートのような置換が行なわれます) の中で
は、解釈する上で曖昧となる場合ができてきます。/$foo[bar]/
は、
/${foo
[bar]/} と解釈される (この場合 [bar]
は、正規表現の
文字クラス) のでしょうか、/${foo[bar]
/} と解釈される (この場合
[bar]
は、配列 @foo
の添え字) のでしょうか。@foo
が他に存在しない場合には、明らかに文字クラスとなります。@foo が存在すれ
ば、Perl が [bar]
の意味に見当をつけますが、たいてい正しい解釈を
します。もし、見当があたっていないときや、偏執的にこだわりたい時には、上
に書いたように中括弧を付けて、強制的に解釈のしかたを決めることができます。
行指向形式のクォートは、シェルの「ヒアドキュメント」構文をもとにしていま す。<< の後にクォートされるものを終了する文字列を示し、現在行の次の行か らその終了文字列に一致する行の前の行までが、その項目の値となります。終了 文字列には、識別子(単語) かクォートされたテキストが許されます。クォート されている場合には、そのクォート文字の種類によって、実際にクォートされる テキストの扱いが、通常のクォートと同様にして決められます。クォートされて いない識別子とした場合には、ダブルクォートのように扱われます。<< と識別 子の間にスペースを入れてはいけません。(もしスペースを入れると、空識別子 として扱われ、最初の空行にマッチするようになります。下記の Merry Christmas の例を参照してください。)終了文字列は、その終了を示す行に単独 で (クォートもしないで、前後に空白を入れることも無く) 置かなければなりま せん。
print <<EOF; # 上記と同じ The price is $Price. EOF print <<"EOF"; # これも同じ The price is $Price. EOF print << x 10; # 正しいが、使わないように。<<"" を使う。 Merry Christmas! print <<`EOC`; # 実際にクォートされたコマンドを実行 echo hi there echo lo there EOC print <<"foo", <<"bar"; # スタックすることも可能 I said foo. foo I said bar. bar myfunc(<<"THIS", 23, <<'THAT''); Here's a line or two. THIS and here another. THAT
文を終了するためのセミコロンを付けなければいけないことは、忘れないでくだ さい。以下のようにしたいのではないと言うことを Perl が知ることはできない のですから:
print <<ABC 179231 ABC + 20;
Go to the first, previous, next, last section, table of contents.