演算を行うときの文字列と数値の自動変換

Perl では使用する演算子によっては、文字列を自動的に数値とみなして演算子したり、逆に数値を自動的に文字列とみなして演算する場合があります。ここでは Perl のプログラムの中で行われる文字列と数値の自動変換に関して解説します。

(Last modified: )

文字列と数値の自動変換

Perl ではダブルクオーテーションで囲まれた値は文字列として認識されます。その為、 "5" と記述した場合は文字列の「5」ですし、単に 5 と記述した場合は数値の「5」となります。

ただ Perl においては文字列と数値を厳密には区分していません。使用される演算子の種類によって、その演算子に対象となる値を文字列と判別したり数値と判別したりします。例えば + 演算子を使う場合には左辺及び右辺に書かれた値を数値として扱います。また . 演算子を使う場合は左辺及び右辺に書かれた値を文字列として扱います。

+ 演算子の例を見てください。

my $var;

$var = "3" + 4;

+ 演算子の左辺は文字列の "3" ですが、自動的に数値の 3 と判断し演算を行います。その結果、変数 $var には加算した結果の数値の 7 が格納されます。

. 演算子の例を見てください。

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 warnings; については「厳密な構文チェックと詳細な警告出力を行う」を参照されてください。

サンプルコード

では簡単なプログラムで確認して見ます。

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 )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。