Comma関数

「#--Comma」で検索すると確実にヒットします。

この関数は、指定された数列に対して、3桁ごとにカンマを挿入します。

もちろん符号や小数点も考慮し処理します。

引数はカンマを挿入したい数列、戻り値はカンマが挿入された値です。

ではこの関数の流れを見てみましょう。

値の評価

まずは、カンマを挿入するには最低でも4桁以上の数値が並んでいる必要がありますよね。

なのでそのあたりを評価します。

if ($number =~ /^[-+]?[0-9]{4,}/g) {
...
...
}

if文が成立したときのみカンマ挿入処理を行い、それ以外は無視します。

if文のパターンマッチは、符号(あってもなくてもOK)+4桁以上の数字にマッチします。

具体的には、頭から小数点が出てくるまでか、出てこなければ数列が終了するまですべての符号と数字にマッチします。

カンマ挿入

次はいよいよカンマを挿入していきます。

my $integerround = pos ($number);
my $markflag = $number =~ /^[-+]/;
for (my $i=$integerround-3 ; $i>$markflag ; $i-=3) {
substr($number, $i, 0) = ',';
}

処理手順をザッと説明すると…。

まずは、pos関数でマッチした桁数を変数「$integerround」に格納します。

次に、符号付かどうかを評価します。

符号付きなら1を、それ以外は空白「0扱い」となる値を変数「$markflag」に格納します。

最後に、for関数とsubstr関数で、小さい値から順にカンマを挿入していき完了です。

return $number;

カンマを挿入できてもできなくても、戻り値を返してこの関数完了です。