in reply to Re: printig with variables in text
in thread printig with variables in text

One way to do it is to inline the file in a HEREDOC, the variables will be interpolated.
I can't remember ever seeing this done before. Can you please give a quick code example or a link to some discussion of it?

Replies are listed 'Best First'.
Re^3: printig with variables in text
by Anonymous Monk on Aug 04, 2008 at 06:42 UTC
    my $oo = 'oop'; my $oop = <<"POOP"; I like to say p$oo Hello $oo POOP print $oop __END__ I like to say poop Hello oop
      But that's just standard double-quotish interpolation.

      What I had imagined from dHarry's reply was that a here-doc could somehow be set up to do both levels of interpolation at once, i.e., interpolate a string, and then interpolate things that look like scalars within the string interpolated in the first step.

      After using a here-doc (but this could have been an ordinary double-quoted string) to do the file interpolation, the code below uses an eval in the usual way to do the second-level interpolation; it's that eval step that I had hoped to eliminate.

      use warnings; use strict; my $foo = 'there'; my $bar = 'now'; my $lines = <<'LINES'; # no interpolation here hello $foo goodbye $bar LINES open my $fh, '<', \$lines or die "opening ref: $!"; local $/ = undef; # file slurp mode my $file_interpolation = <<"FILE_INTERPOLATION"; pre-slurp @{[ <$fh> ]} post-slurp FILE_INTERPOLATION # can eval() step be eliminated? my $eval_interpolation = eval "qq{$file_interpolation}"; print "$file_interpolation \n"; print "$eval_interpolation \n";

      Output:

      pre-slurp hello $foo goodbye $bar post-slurp pre-slurp hello there goodbye now post-slurp