文字列と数値の自動変換
Perlではダブルクオーテーションで囲まれた値は文字列として認識されます。その為、「"5"」と記述した場合は文字列の「5」ですし、単に「5」と記述した場合は数値の「5」となります。
ただPerlにおいては文字列と数値を厳密には区分していません。使用される演算子の種類によって、その演算子に対象となる値を文字列と判別したり数値と判別したりします。例えば「+」演算子を使う場合には左辺及び右辺に書かれた値を数値と判別します。
次の例で考えてみます。
my $var; $var = "3" + 4;
上記の場合、「+」演算子の左辺は文字列の「3」ですが、自動的に数値の「3」と判断し演算を行います。その結果、変数「$var」には数値の「7」が格納されます。
もう1つ別の例で考えてみます。
my $var; $var = "3".4;
上記の場合、「.」演算子の右辺は数値の「4」ですが、自動的に文字列の「4」と判断し演算を行います。その結果、変数「$var」には文字列の「34」が格納されます。これは「.」演算子を使う場合には左辺及び右辺に書かれた値を文字列として扱うためです。
数値の形式ではない文字列の扱い
例えば「12ab34」などの数値と文字が混じった文字列に対して四則演算などの演算を行った場合を確認します。このような文字列の場合は先頭から数値の部分だけが取り出した数値として扱われます。よって「12ab34」に対して四則演算などを行った場合は数値の「12」として扱われます。
my $var; $var = "12ab34" * 5;
上記の場合は「12 * 5」の結果である「60」が変数「$var」に格納されます。
また数値が含まれない文字列の場合は「0」として扱われます。よって「abc」に対して四則演算などを行った場合は数値の「0」として扱われます。
my $var; $var = "abc" + 4;
上記の場合は「0 + 4」の結果である「4」が変数「$var」に格納されます。
ただし「use warnings;」を記述している場合に純粋な数値では無い文字列に対して四則演算などを行うと「Argument xxxx isn't numeric in addition」と言う警告が表示されます。
サンプルプログラム
では簡単なプログラムで確認して見ます。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my ($var1, $var2, $var3, $var4); $var1 = "3" + 4; $var2 = "3".4; $var3 = "12ab34" * 5; $var4 = "abc" + 4; print "¥"3¥" + 4 = $var1¥n"; print "¥"3¥".4 = $var2¥n"; print "¥"12ab34¥" * 5 = $var3¥n"; print "¥"abc¥" + 4 = $var4¥n";
上記を「test9-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
( Written by Tatsuo Ikura )