in reply to Re^2: Invoke the Perl string interpolation engine on a string contained in a scalar variable.
in thread Invoke the Perl string interpolation engine on a string contained in a scalar variable.
In your example $y is a string of characters, but when you eval it with "eval $y", eval expects that string of characters to be Perl code. You need to give eval actual code to eval, not just a string of characters. Do this by wrapping that string of characters in Perl code (in quotes):
my $x = 'foo'; my $y = 'The answer is $x'; my $z = eval enquote($y); sub enquote { return 'qq{' . shift() . '}'; }
There's no great reason to have used the enquote sub rather than just inlining the buildup of the Perl-quoted string other than to attempt to make it more clear what the intent is. I could have just done this:
my $z = eval 'qq{' . $y . '}';
Or even...
my $z = eval "qq{$y}";
In any case, the goal is to turn a raw string of characters into something that eval can reasonably compile as code that when evaluated returns the original string with interpolation in place.
Dave
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Invoke the Perl string interpolation engine on a string contained in a scalar variable.
by ibm1620 (Hermit) on Jan 16, 2019 at 01:33 UTC | |
by AnomalousMonk (Archbishop) on Jan 16, 2019 at 01:37 UTC |