Подтвердить что ты не робот

Может ли интерполяция строк Perl выполнять любую оценку выражения?

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

В Perl существует такой способ, как в Ruby:

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

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

4b9b3361

Ответ 1

В Perl для этого есть аналогичная стенография:

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

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

Ответ 2

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

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