scalar (スカラー)

単一の値を扱う $ で始まる変数

scalar (スカラー) とは、単一の値を扱う変数のことを指します。 具体的には数値、文字列、リファレンスなどが該当します。 また、そのような値を持つ変数をスカラー変数と呼びます。 スカラー変数はシジル $ を使って定義します。

my $num  = 123;           # 数値
my $name = 'Taro';        # 文字列
my $ary  = [ 1, 2, 3 ]    # リファレンス

Perl には変数そのものに型という概念がありません。 もちろん、コンピューターで動作する以上、Perl の内部では型を扱っているのでしょうが、 少なくとも我々が型を指定する必要はありません。 では Perl はどうしているのかというと、文脈(コンテキスト)に応じて、それに適切な型とみなして処理します。 Perl 言語は "contextually polymorphic language" とも言われます。 あえて日本語にするなら「文脈多態言語」でしょうか。 これはスカラーは文脈に応じて文字列にもなり、数値にもなりえる、ということです。 文脈(コンテキスト)とは、そのスカラー変数が扱われる前後のコードのことです。

実際に文脈によって型が変わる例を見てみましょう。

my $val = 99;
print $val + 1;      # 100 (数値として処理)
print $val . '%';    # "99%" (文字列として処理)

スカラー変数 $val には数値の 99 が代入されています。 「+」で加算を行えば、スカラー変数は数値として処理されます。ここまでは違和感がありません。 しかし、「.」で文字列連結を行えば、スカラー変数は文字列として処理されます。 このように状況に応じて型が柔軟に変わることになります。

では、次のコードをご覧ください。ほとんど同じですが、最初のスカラー変数の値が文字列になっています。

my $val = "99";
print $val + 1;      # 100 (数値として処理)
print $val . '%';    # "99%" (文字列として処理)

つまり、スカラー変数の値が数値の 99 であろうが、文字列の "99" であろうが、結果は同じになります。 このように、Perl では、スカラー変数の初期値の型にあまり意味はなく、文脈次第で型が決まるのです。