Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re^3: How to use sprintf %n formatting pattern

by kcott (Archbishop)
on Jun 09, 2022 at 21:22 UTC ( [id://11144624]=note: print w/replies, xml ) Need Help??


in reply to Re^2: How to use sprintf %n formatting pattern
in thread How to use sprintf %n formatting pattern

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.

— Ken

Replies are listed 'Best First'.
Re^4: How to use sprintf %n formatting pattern
by ibm1620 (Hermit) on Jun 11, 2022 at 12:59 UTC
    And I'd never heard of '*2$s' before, so thank you.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11144624]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (None)
    As of 2024-04-19 00:10 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      No recent polls found