$rows = 62; $pascal[0][0] = 1; print " " x ($rows + 1), divBy2($pascal[0][0]), " " x ($rows + 1), "\n"; foreach $i (0..$rows) { print " " x ($rows - $i); foreach $j (0..@pascal) { $pascal[$i + 1][$j] += $pascal[$i][$j - 1] if $j >= 1; $pascal[$i + 1][$j] += $pascal[$i][$j] if $j <= $i; print divBy2($pascal[$i + 1][$j]), " "; } print " " x ($rows - $i - 1), "\n"; } sub divBy2 { my $n = shift @_; my $div = 0; while ($n % 2 == 0 && $n > 0) { $n /= 2; $div++; } return $div if $div; return "." }