Juerd wrote:
Without introduction, I'll just present the syntax idea:
f/%03d %15s/$foo, $bar/;
This gives s?printf to any expression with short and concise syntax, making printf redundant, which means I won't even have to start a discussion about sayf :)
printf "%03d %15s", $foo, $bar;
vs
print f/%03d %15s/$foo, $bar/;
Of course, this is s///-like in quoting behaviour, so f[][] or f"""
should work just as well. The RHS is not a string, but parsed as an
expression in list context. If this feels weird, just think of s///e,
where the RHS is also not a string.
Why not just rename C< sprintf > to C< format > and ditch printf and sayf?
I will also remind you of the Scalar C< .as() > method, which sprintf's it's value.
print "$foo.as('%03d') $bar.as('%15s')";
But I'd still like to keep something works on a whole list at once for those cases where I'm doing several non-trivial expressions at once.
-- Rod Adams