Dưới đây là những gì tôi muốn đạt được:Tôi làm cách nào để xác định lại chương trình con và giữ lại chương trình con cũ?
sub first {
print "this is original first";
}
*original_first = \&first;
sub first {
print "this is first redefined";
}
original_first(); # i expect this to print "this is original first"
first() # i expect this to print "this is first redefined"
Tôi nghĩ rằng bằng cách tiết kiệm là biểu tượng cho first
, tôi muốn có thể sau đó gọi chương trình con gốc (dưới tên original_first
) và cũng để có thể để gọi first
và nhận số được xác định lại. Tuy nhiên, nếu tôi gọi số original_first
, tôi vẫn nhận được thông báo "đây là lần đầu tiên được xác định lại". Tôi phải làm gì để thực hiện công việc này?
Có thể, khi bạn xác định lại biểu tượng 'đầu tiên', chỉ ảnh hưởng đến phần mã? – Geo
việc gán một coderef (được tạo bởi sub {...}) vào một typeglob sẽ chỉ thay thế mục CODE trong glob. bất kỳ kiểu dữ liệu nào khác trong glob sẽ không thay đổi –
Bạn cũng có thể sử dụng 'local * first = sub {...};' để thay thế hàm chỉ trong khối cụ thể. –