in reply to Rate my fizzbuzz

What techniques for making my code more compact and less maintainable have I overlooked?
There are an infinite number of very different ways. Here's just one example:
use 5.012; use warnings; sub task { state $task='@PERLMONKSFAITH'; exit if ++$_[0] > 100; $_->[ +ord("`"^" "^($task.=substr $task,0,1,''))] } $_->[0](my $n=1) for [ sub { say $_[0]; goto &{&task} }, sub { say "Fizz"; goto &{&task} }, sub { say "Buzz"; goto &{&task} }, sub { say $_[0]; goto &{&task} }, sub { say "FizzBuzz"; goto &{&task} }, sub { say "Fizz"; goto &{&task} }, sub { say $_[0]; goto &{&task} }, sub { say "Fizz"; goto &{&task} }, sub { say "FizzBuzz"; goto &{&task} }, sub { say $_[0]; goto &{&task} }, sub { say $_[0]; goto &{&task} }, sub { say "Fizz"; goto &{&task} }, sub { say "Buzz"; goto &{&task} }, sub { say "Fizz"; goto &{&task} }, sub { say $_[0]; goto &{&task} }, sub { say $_[0]; goto &{&task} }, sub { say $_[0]; goto &{&task} }, sub { say "Buzz"; goto &{&task} }, sub { say $_[0]; goto &{&task} }, sub { say "Buzz"; goto &{&task} }, sub { say $_[0]; goto &{&task} }, ];

Replies are listed 'Best First'.
Re^2: Rate my fizzbuzz
by LanX (Saint) on Oct 13, 2025 at 17:54 UTC
Re^2: Rate my fizzbuzz
by ysth (Canon) on Oct 29, 2025 at 21:50 UTC
    Or to be more compact:
    use 5.012;sub t{state$t='@PERLMONKSFAITH';++$_[0]>100?exit:$_->[ord("@ +"^($t.=substr$t,0,1,''))]}$_->[0](my $n=1)for[map{my$s=$_;sub{say$s?" +${s}zz":$_[0];goto&{&t}}}qw/0 Fi 0 0 0 Fi 0 0 FizzBu 0 0 Fi Bu Fi 0 0 + 0 0 0 Bu 0/]