Mamy w pracy skrypt Perla, który jest używany do wykonywania konserwacji. Musiałem go zmodyfikować, aby obsługiwał więcej zadań. Problem polega na tym, że skrypt został skompilowany, a źródło utracono dawno temu.Perl: Dostęp do "moich" zmiennych z innego pliku
Próbowałem użyć B :: Deparse w celu odtworzenia pliku, ale Deparse nie jest doskonały, a wynik jest zepsuty (i bardzo duży ~ 5000 linii deparsed code).
Po przeczytaniu deparowanego kodu stwierdziłem, że muszę zmodyfikować jedną funkcję. Skompilowany skrypt ładuje moduł skryptu tekstowego, więc zmieniłem moduł, aby nadpisać funkcję i wykonać zadanie, którego potrzebuję do wykonania. Problem polega na tym, że nie mogę uzyskać dostępu do skryptu głównego "moje" zmienne.
Oto przykład:
# 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";
}
Wynikiem jest: "$main::a =
" zamiast się realnej wartości.
Z góry dziękuję.
Zmienne leksykalne ("my") nie pojawiają się w tabeli symboli pakietu w przeciwieństwie do globali pakietu. To jest trudne, ale interesujące ... # Sidenote: możesz po prostu napisać sub główne :: call_me {...}, jeśli dobrze pamiętam. – amon
Co masz na myśli przez "skompilowany skrypt". Masz na myśli pakowane? – ikegami
Zgadzam się z ikegami, może być jakiś sposób na odzyskanie tego skryptu, ale żeby wiedzieć, musimy wiedzieć, co masz na myśli przez "skompilowany". –