http://www.perlmonks.org?node_id=1013465


in reply to getting wrong value

printf returns 1 for a successful print, which is what you say happens. You probably want sprintf (note leading 's'), which returns a string.

Update:

>perl -wMstrict -le "my $line = 55473; my $line2 = sprintf '%#x', $line; printf qq{\$line is '%#x' \n}, $line; print qq{\$line2 is '$line2'}; " $line is '0xd8b1' $line2 is '0xd8b1'

Replies are listed 'Best First'.
Re^2: getting wrong value
by ggrise (Initiate) on Jan 15, 2013 at 23:01 UTC
    Thanks, that works. however if printf will print to STDOUT, why can't I get it to print to $line2 ?

      You can (since 5.8; see open, search for 'scalar'):

      >perl -wMstrict -le "my $scalar_as_file; ;; open my $fh_scalar, '>', \$scalar_as_file or die qq{opening: $!}; printf $fh_scalar q{xxx :%#x: yyy}, 55473; close $fh_scalar; ;; print qq{scalar as file: '$scalar_as_file'}; " scalar as file: 'xxx :0xd8b1: yyy'