in reply to use of strict

What is the error message that you get when you use strict?

There is no sprint function in Perl, but there is a sprintf function in Perl.

The common approach is to predeclare your variables as lexical variables using the my keyword.

my $w = 3; my $str = "abc"; my $line = sprintf "%${w}s ", $str; # still has an error

Not knowing the error you got, after declaring your variable names, you will still get an error that you can't use 3 as a reference while strict is in effect. This is because Perl sees %${w} and interprets it as %{ ${ w }}, trying to interpret the value of $w as a reference. You can circumvent that problem by building your format string piecemeal:

my $line = sprintf "%" . $w . "s ", $str;

Replies are listed 'Best First'.
Re^2: use of strict
by shmem (Chancellor) on Jul 25, 2017 at 07:48 UTC
    you will still get an error that you can't use 3 as a reference while strict is in effect. This is because Perl sees %${w} and interprets it as %{ ${ w }}, trying to interpret the value of $w as a reference.

    Did you test your assumption?

    my $w = 5; my $str = "abc"; my $line = sprintf "%${w}s ", $str; print "'$line'\n"; __END__ ' abc '

    The format string is %5s with perl 5, version 20, subversion 2 (v5.20.2).

    perl -le'print map{pack c,($-++?1:13)+ord}split//,ESEL'

      No, I didn't test my assumption, but my wonderment about it slowly ceases.

      Perl does not interpolate hashes in strings, as it accurately says in perlop:

      For constructs that do interpolate, variables beginning with "$" or "@" are interpolated.
      use strict; print "%foo";

      So, my argumentation above is simply wrong as Perl will not go looking for a hash (reference).