Chúng tôi có một tập lệnh Perl được sử dụng để thực hiện bảo trì. Tôi cần phải sửa đổi nó để xử lý nhiều công việc hơn. Vấn đề là kịch bản được biên dịch và nguồn đã bị mất từ lâu.Perl: Truy cập các biến 'của tôi' từ một tệp khác
Tôi đã cố gắng sử dụng B :: Deparse để tạo lại tệp nhưng Deparse không hoàn hảo và đầu ra bị hỏng (và rất lớn ~ 5000 dòng mã được deparsed).
Sau khi đọc mã bị bỏ qua, tôi thấy rằng tôi cần phải sửa đổi một chức năng. Kịch bản đã biên dịch tải một mô-đun tập lệnh văn bản thuần tuý, vì vậy tôi đã thay đổi mô đun để ghi đè hàm và thực hiện tác vụ tôi cần để thực hiện. Vấn đề bây giờ là tôi không thể truy cập vào các biến "my".
Dưới đây là một ví dụ:
# 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";
}
Kết quả là: "$main::a =
" thay vì nhận được giá trị thực.
Xin cảm ơn trước.
Biến số ('my') không bật lên trong bảng biểu tượng của gói trái ngược với hình cầu gói. Vì vậy, đây là một khó khăn, nhưng một trong những thú vị ... # Sidenote: bạn chỉ có thể viết phụ chính :: call_me {...} nếu tôi nhớ chính xác. – amon
Ý bạn là gì bởi "tập lệnh được biên dịch". Bạn có nghĩa là đóng gói? – ikegami
Tôi đồng ý với ikegami, có thể có một số cách để khôi phục tập lệnh đó, nhưng để biết, chúng tôi cần biết ý của bạn là "biên soạn". –