То, что вы описываете, называется в Perl lingo «символической ссылкой», и это, как правило, осуждается как очень, очень, очень ... очень плохая практика, потому что она работает только с глобальными переменными ( которые, как правило, лучше избегать сами по себе), и это один из самых простых способов создания ошибок, которые почти невозможно найти.
Но это можно сделать. И, поскольку вы просите сохранить устаревший код, который, вероятно, уже столь же плох, я покажу вам, как:
perl -e '$count14 = 42; $sref = "count14"; print $$sref . "\n"'
Это так просто.
Но, на самом деле, не делайте этого, если вы можете избежать этого.
В общем случае для избежания символьных ссылок вместо этого используется хеш:
my %values = (name1 => 'Alice', name2 => 'Bob');
for my $count (1 .. 2) {
my $name = $values{'name' . $count};
print "$name\n";
}
В конкретном случае группы переменных с именами foo1
, foo2
и т. Д., Тем не менее, вы, вероятно, хотите вместо этого использовать массив:
my @names = qw( . Alice Bob ); # '.' is a dummy to fill index 0 so the names start at 1
for my $count (1 .. 2) {
my $name = $names[$count];
print "$name\n";
}
Я бы настоятельно посоветовал бы использовать один из этих других методов вместо символьных ссылок, если только существующий код сильно не зависит от наличия $name1
, $name2
и т. Д. Если вы можете позволить себе время заменить все эти массивы и проверить, что версия на основе массива все еще работает, вы улучшите качество кода для будущих сопровождающих (который, вероятно, будет включать вас).