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

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

Replies are listed 'Best First'.
Re^4: printig with variables in text
by Anonymous Monk on Aug 04, 2008 at 15:07 UTC
    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