Интерполяция вызова подпрограммы, возвращающей ссылку
Вот пример интерполяции результата вызова подпрограммы, которая возвращает ссылку:
#!/usr/bin/perl -w use strict; no strict 'refs';
sub subr() { return 'abc' }
our $abc=123; $_="${&subr}"; print $_;
На печать выходит 123.
Здесь используется разыменование именной ссылки abc, поэтому переменная $abc должна быть глобальной, т.к. имена переменных my не находятся в глобальной таблице имен typeglob. Кроме того, если вы применяете директиву use strict, то надо разрешить разыменование именных ссылок: no strict 'refs'.
Подпрограмма subr возвращает строку abc, которая является именем переменной.
Конструкция ${&subr} разыменовывает эту ссылку и возвращает значение переменной $abc. Задавая разные значения переменной $abc или разные возвращаемые подпрограммой subr значения, будем получать разные результаты интерполяции.
Здесь обратите внимание на разыменовывающий префикс & перед именем подпрограммы.
Он здесь всегда обязателен. Этот способ интерполяции годится только для написанных вами подпрограмм.