Может ли интерполяция строк Perl выполнять любую оценку выражения?
связанный с вопросом: Как заменить выраженное выражение в Perl?
В Perl существует такой способ, как в Ruby:
$a = 1;
print "#{$a + 1}";
и он может распечатать 2
?
Ответы
Ответ 1
В Perl для этого есть аналогичная стенография:
$a = 1;
print "@{[$a + 1]}"
Это работает, потому что []
создает ссылку на массив, содержащий один элемент (результат вычисления), а затем @{}
разделяет массив, который внутри строковой интерполяции печатает каждый элемент массива в последовательности. Поскольку есть только один, он просто печатает один элемент.
Ответ 2
Вы можете использовать трюк @{[ EXPRESSION ]}
, о котором упоминал Грег Хьюглилл.
Также существует модуль Interpolation, который позволяет выполнять произвольные преобразования на значениях, которые вы интерполируете (например, кодировать объекты HTML) в дополнение к оценке выражений.