Go to the first, previous, next, last section, table of contents.


スカラ値の構成

数値リテラルは、慣習的な浮動小数点数と整数の形式で示されます:

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.

検索式: