Регулярные выражения Perl и их применение

       

Интерполяция вызова подпрограммы, возвращающей ссылку


Вот пример интерполяции результата вызова подпрограммы, которая возвращает ссылку:

#!/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 значения, будем получать разные результаты интерполяции.

Здесь обратите внимание на разыменовывающий префикс & перед именем подпрограммы.

Он здесь всегда обязателен. Этот способ интерполяции годится только для написанных вами подпрограмм.



Содержание раздела