単一の値を扱う $
で始まる変数
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 では、スカラー変数の初期値の型にあまり意味はなく、文脈次第で型が決まるのです。