読者です 読者をやめる 読者になる 読者になる

初代Masteries

きっとモヒカンにもなれないお前たちに告げる!!!

Project Euler - Problem 20

Problem 20

100!の答えの各位の和を求める問題.

use strict;
use warnings;
use bigint;

my $factorial = 1;
for (1..100) {
    $factorial *= $_;
}
my $sum = 0;
$sum += $_ for split //, $factorial;

print $sum;

手堅く実装.

余談: 後置forについて

後置forの部分, よくよく考えずに「myの宣言とまとめたらいいんじゃね?」とか思って

my $sum += $_ for split //, $factorial;

...みたいに書いちゃったら, ものの見事に怒られました.

Use of uninitialized value $sum in print at ./p20.pl line 11.

この辺は, 以前書いた「my+後置ifについてまとめてみた」に書いた通り, 「my+後置」という形は未定義なので使ってはいけない, という事ですね.

注意: (my $x if ... のような) 条件構造やループ構造で修飾された my 文の振る舞いは 未定義 です。 my 変数の値は undef かも知れませんし、以前に代入された値かも 知れませんし、その他の如何なる値の可能性もあります。 この値に依存してはいけません。 perl の将来のバージョンでは現在のバージョンとは何か違うかも知れません。 ここには厄介なものがいます。

二度やったミスは三度やる, かもしれないので, そんな事がないようにしっかり覚えておこうと思います.