Can Perl string interpolation perform any expression evaluation?

nonopolarity picture nonopolarity · Oct 15, 2010 · Viewed 13.1k times · Source

related to question: How do I substitute with an evaluated expression in Perl?

In Perl, is there a way like in Ruby to do:

$a = 1;
print "#{$a + 1}";

and it can print out 2?

Answer

Greg Hewgill picture Greg Hewgill · Oct 15, 2010

There's a similar shorthand in Perl for this:

$a = 1;
print "@{[$a + 1]}"

This works because the [] creates a reference to an array containing one element (the result of the calculation), and then the @{} dereferences the array, which inside string interpolation prints each element of the array in sequence. Since there is only one, it just prints the one element.