Abbiamo al lavoro uno script Perl che viene utilizzato per eseguire la manutenzione. Avevo bisogno di modificarlo per gestire più attività. Il problema è che lo script è compilato e la fonte è stata persa molto tempo fa.Perl: accesso alle variabili "my" da un altro file
Ho cercato di usare B :: Deparse al fine di ricreare il file, ma Deparse non è perfetto e l'uscita è rotto (e molto grande ~ 5000 linee di codice deparsed).
Dopo aver letto il codice deparsato ho scoperto che ho bisogno di modificare una funzione. Lo script compilato carica un modulo di script in solo testo, quindi ho modificato il modulo per sovrascrivere la funzione ed eseguire l'attività che mi serve per eseguire. Il problema ora è che non posso accedere alle variabili "mie" dello script principale.
Ecco un esempio:
# main.pl
my $a = 1;
sub call_me {
print "unmodified";
}
use MOD;
call_me;
MOD.pm
package MOD;
main::{'call_me'} = sub {
print "\$main::a = $main::a\n";
}
Il risultato è: "$main::a =
" invece di ottenere il valore reale.
Grazie in anticipo.
Le variabili lessicali ('my') non si visualizzano nella tabella dei simboli del pacchetto in contrasto con le globali dei pacchetti. Quindi questo è difficile, ma interessante ... # Sidenote: puoi semplicemente scrivere sub main :: call_me {...} se ricordo male. – amon
Cosa intendi con "script compilato". Vuoi dire confezionato? – ikegami
Sono d'accordo con ikegami, potrebbe esserci un modo per recuperare quello script, ma per sapere, dobbiamo sapere cosa intendi con "compilato". –