Perl5 perldata - Perl のデータ構造
[変数名][コンテキスト][スカラ値][スカラ値の構成][リスト値の構成][データ型]
スカラ値
スカラ変数には、数値、文字列、リファレンスのような、さまざま な種類の単独データを保持することができます。
一般に、1 つの 形式から他への変換は透過的です。
(スカラに複数の値を保持す ることはできませんが、複数の値を持っている配列やハッシュへの リファレンスを保持することができます。)
スカラの値どうしは、 自動的に変換されるので、スカラを返す演算や関数では、コンテキ ストが文字列を要求しているのか、数値を要求しているのかを意識 する必要がないのです (実際は意識することができないのですが)。

スカラ値は、その値が空文字列か数値の 0 (あるいは同値な文字列"0") 以外の場合には、ブール値の真として扱われます。
ブール値が必要となるコンテキストは、単に特別なスカラコンテキストとして扱われます。

スカラのヌルには、実は defined と undefined の 2 種類があります。
undefined のヌルは、エラーがあったときや、ファイルの終わりに達したとき、初期化していない変数や配列要素を参照したときなど、何かに対する実際の値が存在しないときに返されます。
undefined のヌルは、最初に defined であるかのように使ったときに defined となり得ますが、それに先立って値が defined かどうかを調べるために defined() 演算子を使うことができます。

配列の大きさはスカラ値です。
配列 @days の大きさは、csh のように $#days を評価するとわかります。
(実際は、これは大きさではなく、最後の要素に対する添え字になります。
(通常は)0 番目の要素があるからです。)
$#days に代入を行なうと、配列の大きさも変化します。
この方法で配列を小さくすると、見えなくなった部分の値は破壊されます。
小さくした配列を再び大きくしても、以前存在した要素に対する前の値が回復することはありません。
(Perl 4 では回復可能でしたが、デストラクタが期待どうりの時点で呼ばれることを保証するために、これを止めました。)
大きくなるであろう配列を、あらかじめ大きくしておくことで、ある程度の効率を得ることもできます。
(最後の要素よりも後ろに離れた位置に代入を行なうことでも、配列を大きくすることができます。)
配列に空リスト () を代入すると何も無い状態にまで、
切り詰めることができます。
以下の 2 つは等価です:
     @whatever = ();
     $#whatever = $[ - 1;
名前のある配列をスカラコンテキストで評価すると、配列の大きさが返されます。
(これは、リストに対しては成り立ちません。
この場合には、C のコンマ演算子と同じく最後の値が返されます。)
以下は常に真となります:
     scalar(@whatever) == $#whatever - $[ + 1;
Perl version 5 では $[ の意味を変更し、$[ を設定していないファイルで、他のファイルがこの変数を変更しているかどうかを、気にする必要がなくなりました。
(言い換えると、$[ は使わないほうが良いと言うことです。)
ですから、普通は以下のようになります。
     scalar(@whatever) == $#whatever + 1;
ハッシュをスカラコンテキストで評価した場合、ハッシュの中に 1つでも key/value のペアが登録されているときにだけ、真となる値が返されます。 (key/value のペアが登録されていれば、返される値は、使用しているエントリの数と、割り付けられているエントリの数を、スラッシュで区切った文字列です。 これは、与えたデータに対して、Perl の (コンパイルされた) ハッシュのアルゴリズムが、うまく動作しないかを確認するときくらいにしか使えませんが。 たとえば、ハッシュに 10,000 のものを入れ、%HASH をスカラコンテキストで評価したときに "1/16" が得られれば、16 のうち 1 つのエントリだけが使われ、おそらくそこに 10,000 すべてが入っていることを意味します。ほとんど起こりそうもないことですが。)

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