I agree.
My post was mainly intended to demonstrate the use of %n as you'd requested.
It was not a recommendation for production-grade code.
I would probably just generate the potentially long string with sprintf("%.2f %d/%d/%d %s", @$record);
then use printf to truncate and print.
You have a number of options here; I've shown a selection below —
the first pair indicates a gotcha which you should avoid;
the remaining three pairs are all potential candidates (depends on the final output you want).
$ perl -e '
my $x = "12345";
my $y = "1234567890";
printf q{%-*2$s|}."\n", $x, 9;
printf q{%-*2$s|}."\n", $y, 9;
printf q{%-.*2$s|}."\n", $x, 9;
printf q{%-.*2$s|}."\n", $y, 9;
printf q{%-*2$.*2$s|}."\n", $x, 9;
printf q{%-*2$.*2$s|}."\n", $y, 9;
printf q{%-*2$.*3$s|}."\n", $x, 10, 9;
printf q{%-*2$.*3$s|}."\n", $y, 10, 9;
'
12345 |
1234567890|
12345|
123456789|
12345 |
123456789|
12345 |
123456789 |
The (possibly odd-looking) 'q{...}."\n"' is needed to avoid a
'Global symbol "$s" requires explicit package name ...' error.
You could escape the '$' signs (e.g. "%-*2\$.*3\$s|\n")
but, in my opinion, that makes the already somewhat cryptic format even less readable.
I hadn't previously used '%n', so that was an interesting learning exercise for me.
Thanks for the question.
|