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"; #### pre-slurp hello $foo goodbye $bar post-slurp pre-slurp hello there goodbye now post-slurp