Unfortunately, the last several entries are all missing newlines, which makes the output very hard to read.
It seems like such output is just a little too golfed!
Update: Otherwise, you can still make it shorter:
die+map{(Fizz)[$_%3].(Buzz)[$_%5]||$_}1..100
Update 2: As Sidhekin pointed out to me, the -l switch makes the newline problems go away.
On an unrelated note, I thought it would be fun writing a version that doesn't use the modulo operator (%). Originally I tried golfing it, but it didn't golf well, so here's an easy-to-read version, which makes use of divisibility tests:
use strict;
use warnings;
sub divisible_by_3 {
my $num = shift;
while (length($num) > 1) {
my $sum = 0;
map { $sum += $_ } split '', $num;
$num = $sum;
}
return $num =~ /^[0369]$/;
}
sub divisible_by_5 {
my $num = shift;
return ($num =~ /[05]$/);
}
sub divisible_by_15 {
my $num = shift;
return (divisible_by_3($num) and divisible_by_5($num));
}
foreach (1 .. 100) {
printf "%s\n",
divisible_by_15($_)? "fizzbuzz":
divisible_by_3($_)? "fizz":
divisible_by_5($_)? "buzz":
$_;
}
s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/
|