Самый простой способ - сделать копию:
use strict;
use warnings;
my $p = { name => "Joe" };
my $name = $p->{name};
print "'$name' is '$p->{name}'\n";
Это то, что я бы использовал, если мне не нужно присваивать $name
.
Если вы хотитечтобы иметь возможность писать через $name
, самый простой способ - сделать это ссылкой:
use strict;
use warnings;
my $p = { name => "Joe" };
my $name = \$p->{name};
print "'$$name' is '$p->{name}'\n";
$$name = "Jill";
print "'$$name' is '$p->{name}'\n";
Если вы действительно хотите использовать псевдоним, самый простой способ - использовать цикл for
:
use strict;
use warnings;
my $p = { name => "Joe" };
for my $name ($p->{name}) {
print "'$name' is '$p->{name}'\n";
$name = "Jill";
print "'$name' is '$p->{name}'\n";
}
Если ваш perl достаточно новый (5.22+), вы также можете использовать псевдонимы по ссылкам:
use strict;
use warnings;
use feature 'refaliasing';
my $p = { name => "Joe" };
\my $name = \$p->{name};
print "'$name' is '$p->{name}'\n";
$name = "Jill";
print "'$name' is '$p->{name}'\n";
Наконец, вы можете делать псевдонимы для переменных пакета, назначая typeglobs, ноэто не то, что я бы на самом деле использовал здесь:
use strict;
use warnings;
my $p = { name => "Joe" };
*name = \$p->{name}; # sets *name{SCALAR} to point to $p->{name}
our $name; # declares $name so we can use it to refer to $main::name
print "'$name' is '$p->{name}'\n";
$name = "Jill";
print "'$name' is '$p->{name}'\n";