2015-09-30 3 views
3

Unfortunatelly, я не выяснить, почему $alfa остается пустым:Почему я не могу использовать интерполированную переменную как varname?

use 5.014; 
no strict 'refs'; 

my $berta = 5; 
my $gamma = 'berta'; 
my $alfa = ${$gamma}; 

say "'$alfa'"; 

Должно быть что-то очень просто ... Я ожидал $alfa стать 5 здесь. Что я пропустил?

+0

Ваши имена переменных интересны. Кто такой берта? : D – simbabque

+2

. Актуальность этого обсуждения: http://perl.plover.com/varvarname.html - это ТЕЗЕРНАЯ идея, когда-либо сделавшая это. – Sobrique

+0

Возможный дубликат [In Perl, как я могу использовать строку как имя переменной?] (Http://stackoverflow.com/questions/3871451/in-perl-how-can-i-use-a-string-as -a-variable-name) – RobEarl

ответ

6

Я думаю, проблема в том, что код работает только с глобальными переменными, а не с лексическими переменными, объявленными с использованием my. See the FAQ.

our $berta = 5; 
my $gamma = 'berta'; 
say $$gamma; # 5 

Очевидно, что это не очень хорошая идея в производственном коде.

+0

Только '$ berta', имя переменной разыменования, должно быть глобальным. Это нормально для '$ gamma' для лексики. – mob

+0

Спасибо за пояснения, отредактируйте. – zoul

Смежные вопросы