Wenn Sie normalerweise denken, dass Sie symbolische Referenzen verwenden müssen, werden Sie besser mit einem Hash (assoziative Array) bedient.
use strict;
use warnings;
my %user = (
'bob' => [qw' jerk perlfan '],
'mary' => 'had a little lamb',
);
{
for my $name (qw'bob mary susan'){
if(exists $user{$name}){
if(ref($user{$name}) eq 'ARRAY'){
print join(' ', @{$user{$name}}), "\n";
}else{
print $name, ' ', $user{$name}, "\n";
}
}else{
print "$name not found\n";
}
}
}
Ergebnisse in:
jerk perlfan
mary had a little lamb
susan not found
Wenn Sie denken, Sie wirklich symbolische Referenzen verwenden müssen, ist dies ein sicherer Weg, das zu tun.
use strict;
use warnings;
# can't use my
our @bob = ("jerk", "perlfan");
our $mary = 'had a little lamb';
{
for my $name (qw'bob mary susan'){
if(exists $::{$name}){
my $ref = $::{$name};
if(*{$ref}{ARRAY}){
print join(' ',@$ref), "\n";
}elsif(*{$ref}{SCALAR}){
print "# $name is not an array, it's a scalar\n";
print $name, ' ', $$ref, "\n";
}
}else{
print "$name not found\n"
}
}
}
Welche zurück:
jerk perlfan
# mary is not an array, it's a scalar
mary had a little lamb
susan not found
Sie sollten beachten, dass es schwieriger zu symbolischen Referenzen ist sicher, weshalb man sie nicht verwenden sollten.
Es sei denn, Sie sind ein Experte, etwas fortgeschrittenes zu tun.
Genau. Sie hätten leicht nach der zweiten Kugel anhalten können. Ich habe den Titel der Frage entsprechend bearbeitet. – innaM
+1 für eine technisch korrekte und erstaunlich umfassende Erklärung, wie man es macht und warum nicht. –