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

文字列の扱い

数値文字列は通常の小数点や整数の形式で表す。

12345
12345.67
.23E-10
0xffff	# 16 進
0377	#  8 進

文字列はシングルクォートまたはダブルクォートで区切られる。 これらはシェルにおけるクォートとよく似ている。 ダブルクォートで囲まれた文字列にはバックスラッシュや変数の置換が行われる。 シングルクォートで囲まれた文字列には行われない。( \' と \\ を除いて。)

通常のバックスラッシュ規則が改行やタブなどの文字を表すのに使える。 加えて以下のちょっと変わった形式も使える。

\t      タブ
\n      改行
\r      リターン
\f      フォームフィード
\b      バックスペース
\a      アラーム(ベル)
\e      エスケープ
\033    8 進文字
\x1b    16 進文字
\c[     コントロール文字
\l      次の文字を小文字にする
\u      次の文字を大文字にする
\L      \E までを小文字にする
\U      \E までを大文字にする
\E      大小文字の修飾の終り

改行を直接文字列に書き入れることもできる。 すなわち、文字列は始まった行と異なる行で終わることができる。 これは便利であるが、最後にクォートを忘れると、 クォートを含むかなり離れた別の行を見つけるまで perl は エラーを報告しないだろう。

文字列内の変数置換はスカラー変数・通常の配列値・配列の一部に限られる。 (言い換えると、$@ で始まる識別子と、 それに括弧で囲まれた添え字がある場合だけである。) 次のコードは `The price is $100.' を出力する。

$Price = '$100'; # 解釈されない
print "The price is $Price.\n";# 解釈される

注意:
後に続くアルファベットや数字と区別するために、 識別子を {} で囲うことができる。 また、シングルクォートで囲まれた文字列は その前の単語とはスペースで区切らなければならない。 なぜなら、シングルクォートは識別子として有効な文字だからである。 (Packages の項を参照。See section パッケージ.)

特殊な文字列が二つあり、__LINE____FILE__ である。 これはプログラムのその時点での行番号とファイル名を表す。 これらは独立したトークンとしてのみ使用できる。 文字列中に書き入れることはできない。

さらに、__END__ は実際のファイルの終了の前の スクリプトの論理的な終了を示すのに使える。 残りのテキストは全て無視される (ただしファイルハンドル DATA から読むことができる。)。 ^D^Z の 二つのコントロールキャラクタは __END__ と同じ意味である。

文法的に解釈不可能な単語は それがシングルクォートで囲まれているかのように扱われる。 このため、アルファベット・数字・下線のみからなる単語は アルファベットで始まらなければならない。 ファイルハンドルやラベルと同じく、小文字のみからなる裸の単語は 将来の予約語と衝突する危険がある。-w スイッチを使えば、 perl はそのような単語について警告する。

配列値をダブルクォートで囲まれた文字列に入れた場合は、 配列の全要素を $" で示される区切り(デフォルトはスペース) で区切って一つにした文字列になる。 (3.0 以前のバージョンの perl では @ は メタキャラクターではなかったので、 @array$array[EXPR]@array[LIST]$array{EXPR}@array{LIST} の解釈は プログラムのどこかで参照されているか、 予め define されている場合にのみ行われる。) 次の二つは同等である。See section $” : 配列値を ”” で囲んだ時に要素間に入るセパレータ for $".

$temp = join($",@ARGV);
system "echo $temp";

system "echo @ARGV";

検索パターン(これにもダブルクォートと同じ置換が行われる)においては、 あいまいな場合がある。

/$foo[bar]/

/${foo}[bar]/ ([bar] は正規表現の文字クラス)

として解釈するべきか、

/${foo[bar]}/ ([bar] は配列 @foo の添え字)

として解釈するべきか ?

@foo が存在しないならば、明らかに文字クラスである。 @foo が存在すれば、perl は [bar] についてよく考え、 その答えはほとんどの場合正しい。もし間違った解釈をしたり、 あるいはあなたが単に偏執狂ならば、 上で述べたように {} を入れることで正しい解釈をさせることができる。


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