Может ли Perl строковая интерполяция выполнить какую-либо оценку выражения? - PullRequest
33 голосов
/ 15 октября 2010

относится к вопросу: Как заменить вычисленное выражение в Perl?

В Perl есть способ, как в Ruby:

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

и он может распечатать 2?

Ответы [ 2 ]

58 голосов
/ 15 октября 2010

В Perl есть аналогичное сокращение:

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

Это работает, потому что [] создает ссылку на массив, содержащий один элемент (результат вычисления), а затем @{} разыменовывает массив, который внутри интерполяции строки печатает каждый элемент массива в последовательности. Поскольку существует только один, он просто печатает один элемент.

10 голосов
/ 15 октября 2010

Вы можете использовать трюк @{[ EXPRESSION ]}, о котором говорил Грег Хьюгилл.

Существует также модуль Interpolation , который позволяет выполнять произвольные преобразования для интерполируемых значений (например, кодировать объекты HTML) в дополнение к оценке выражений.

...