This post is part of a series on Mohammad Anwar’s excellent Perl Weekly Challenge, where Perl and Raku hackers submit solutions to two different challenges every week. (It’s a lot of fun, if you’re into that sort of thing.)
Challenge 1 this week is an easy one:
Write a script to print decimal number 0 to 50 in [the] Octal Number System.
Perl and Raku
We can solve this with the following polyglot (runs in both languages at once):
printf "Decimal %2d = Octal %2o\n", $_, $_ for 0..50;
Still, in Raku, we can do the following:
say (0..50).fmt('Decimal %1$2d = Octal %2o', "\n");
We are able to do this by re-using the argument to
printf syntax doesn’t tend to get used often, but it’s been around for a very long time, and works in many other languages, including Perl:
printf 'Decimal %1$2d = Octal %1$2o'."\n", $_ for 0..50;
We are able to use the first argument twice thanks to the
1$ between the
% and the type (
o in this case).
n$ is a POSIX extension that tells
printf to use the nth argument, instead of whatever might be next in the list.