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
|