In Perl, è possibile creare una variabile globale basata su una stringa?Come posso creare un nome di variabile Perl basato su una stringa?
esempio se ho avuto una funzione come:
sub create_glob_var {
my ($glob_var_str) = @_;
# something like this (but not a hash access).
our ${$glob_var_str};
};
e ho chiamato come:
create_glob_var("bar");
Come potrei modificare create_glob_var
per creare effettivamente una variabile globale chiamata $bar
?
Il mio progetto utilizza perl 5.8.5.
EDIT
Quanto segue non funziona:
use strict;
BEGIN {
sub create_glob_var {
my ($glob_var_str) = @_;
no strict 'refs';
$$glob_var_str = undef; # or whatever you want to set it to
}
create_glob_var("bah");
};
$bah = "blah";
produce:
Variable "$bah" is not imported at /nfs/pdx/home/rbroger1/tmp2.pl line 12. Global symbol "$bah" requires explicit package name at /nfs/pdx/home/rbroger1/tmp2.pl line 12. Execution of /nfs/pdx/home/rbroger1/tmp2.pl aborted due to compilation errors.
NOTA mi rendo conto che l'utilizzo di variabili globali provoca ozone depletion and male pattern baldness. Sto cercando di ripulire un codice legacy che è già completamente infetto dall'uso di variabili globali. Un refactoring alla volta ...
La subroutine crea la variabile globale, ma è comunque necessario accedervi in un modo accettabile per strict, probabilmente uno di 1) $ My :: Package :: bah = "blah", 2) usa vw qw ($ bah); $ bah = "blah", o 3) il nostro $ bah = "blah". – Sean
Non fare cose del genere. vedi http://stackoverflow.com/questions/1549685/how-can-i-use-a-variable-as-a-variable-name-in-perl –
concordato. Utilizzare un hash globale per memorizzare i dati (se è necessario utilizzare globalmente), piuttosto che creare nuovi scalari! – Ether