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

Consider:

my $str = '1234567890' x 6; my $prefixLen; printf "Prefix stuff %n%s\n", $prefixLen, substr $str, 0, 35 - $prefix +Len;

What value does substr see for $prefixLen? How can printf get the substr generated parameter generated after printf has set about generating the output?

Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond

Replies are listed 'Best First'.
Re^4: How to use sprintf %n formatting pattern
by hv (Prior) on Jun 09, 2022 at 11:54 UTC

    By using a sprintf parameter to determine the width:

    my $str = '1234567890' x 6; my $prefixLen; my $magicLimit = tie_me_a_scalar(sub { $max_width - $prefixLen }); printf "Prefix stuff %n%.*s", $prefixLen, $magicLimit, $str;

    Update: corrected %*s to %.*s

      It's not clear to me how a tied scalar gets around the evaluation order issue with printf's arguments. Maybe you could provide a fully worked example?

      Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond