in reply to your Perl bug Achilles heel

Mine is similar to the op. Telling built ins that take a list where the list ends.
my %broken = ( monday => join q{/}, q{one}, q{two}, tuesday => sprintf q{%s%s}, q{three}, q{four}, ); my %better = ( monday => join(q{/}, q{one}, q{two}), tuesday => sprintf(q{%s%s}, q{three}, q{four}), );
Rather than have to remember that parens are needed in this case I tend to use them all the time. If the function's args are on more than one line it gives you something to pin the ; to.
my $str = sprintf( q{%s -> %s}, get_data(), get_more(), );