Perl5 perldata - Perl のデータ構造
[変数名][コンテキスト][スカラ値][スカラ値の構成][リスト値の構成][データ型]
スカラ値の構成
数値リテラルは、慣習的な浮動小数点数と整数の形式で示されます:
     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;

出典:Perl manpages Last change: Release 5.0 Patchlevel 00 5