ルモーリン
ホーム 更新 Perl Sample サービス 雑談 鉄ゲタ Linux リンク 連絡先

Perlサンプル23 数値と文字列の区別がない

2020-07-04

Perlには数値と文字列の区別がありません。 恐らく、区別する最古のプログラミング言語はアセンブラでしょうか? DC疑似命令のオペランドに裸の数字を書くと数値になり、クォーテーションで囲むと文字列になった覚えがあります(ウロ覚え)。 Perlでは数値と文字列を区別しません。

#!/usr/bin/env perl

use v5.26;
use utf8;
use warnings;
use strict;

use Encode::Locale;

use FindBin;
use lib $FindBin::Bin;
use MyDumper;

use feature "say";
use open IO => ":utf8";

binmode STDOUT, ":encoding(console_out)";
binmode STDERR, ":encoding(console_out)";

$| = 1;

# 123を代入します
# クォーテーションなどで囲んでいないからと言って数値という訳ではありません
# あくまでも「123」です
my $v = 123;
say $v;

# $vにある「123」を数値と見なし、「2」も数値と見なして乗算して戻します
$v *= 2;
say $v;

# $vにある「246」を文字列と見なし、「80」も文字列と見なして連結して戻します
$v .= 80;
say $v;

# $vにある「24680」を数値と見なし、「75320」も数値と見なして加算して戻します
$v += 75320;
say $v;

# あとは分かるな?
$v = "123";
say $v;
$v *= "2";
say $v;
$v .= "80";
say $v;
$v += "75320";
say $v;

まあ、同じですよね。

123
246
24680
100000
123
246
24680
100000