Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

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

by ibm1620 (Hermit)
on Jun 09, 2022 at 19:17 UTC ( [id://11144611]=note: print w/replies, xml ) Need Help??


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

Got it.

I had thought %n would make for a more elegant solution. It doesn't look like %n saves a whole lot of work since a follow-on (s)printf statement (or clause, as you demonstrate) seems to be required, at which point the length function would provide the same info. (I think.)

Replies are listed 'Best First'.
Re^3: How to use sprintf %n formatting pattern
by kcott (Archbishop) on Jun 09, 2022 at 21:22 UTC

    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

      And I'd never heard of '*2$s' before, so thank you.
Re^3: How to use sprintf %n formatting pattern
by LanX (Saint) on Jun 09, 2022 at 19:29 UTC
    > at which point the length function would provide the same info

    yep, exactly my thought, it's just shorter syntax.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (3)
As of 2024-04-16 22:09 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found