2010-10-08 24 views
5

Nếu không sử dụng bộ lọc nguồn, có cách nào để thay đổi gói đang chạy không? Tôi đang cố gắng để thực hiện cùng một điều oose.pm hiện, và tôi tự hỏi nếu tôi có thể thả người dùng của tôi trong một gói không chính.Perl thay đổi gói hiện tại?

Trả lời

5

Tôi nghĩ bạn sẽ có thể làm điều đó bằng cách thay đổi PL_curstashPL_curstname ở cấp C.

PL_curstash = gv_stashpvs("Some::Package", GV_ADD); 
sv_setpvs(PL_curstname, "Some::Package"); 

PL_curstash là stash của gói hiện tại trong biên soạn, PL_curstname là tên của nó.

Cập nhật:

tôi đã tìm thấy vấn đề này loại thú vị và thực hiện các giải pháp như Devel::ChangePackage. Hóa ra những gì ban đầu tôi đề nghị chỉ hoạt động. Bạn có thể lấy nó hoặc từ http://github.com/rafl/devel-changepackage hoặc từ gương CPAN gần bạn khi chúng đã được cập nhật.

+0

Nhưng anh ấy đang cố gắng thay đổi gói _caller's_, không phải của riêng anh ấy. – cjm

+0

Đó là lý do tại sao anh ta nên làm điều trên thay vì đẩy curstash và curstname vào ngăn xếp lưu và thực hiện các thay đổi cục bộ với phạm vi hiện tại, giống như từ khóa gói sẽ làm. – rafl

Các vấn đề liên quan