編輯:
每個模塊的簡要概述。 (我假設這是正確的方式來添加更多的信息,我的帖子。道歉,因爲這是我第一次發佈)子程序重新定義了Perl中的錯誤
A.pm - 包含可重用的例程來讀取ZIP文件,解密內容,驗證等(由各種CGI文件,命令行腳本和其他Perl模塊使用)
B.pm - 這是Utils文件,它連接到DB,所有與SQL相關的子例程,調用C. pm在每個文件中寫入標記
C.pm - 在ZIP中標記類似於校驗和的每個文件的特殊例程(檢查允許的文件類型,讀取文件,寫入文件,檢查等),使用A.pm因爲模塊需要解密內容,執行驗證由A.pm
包括一些示例代碼(我只是在這裏發佈幾條使用線;顯然很多模塊,都在使用的.pm)
A.pm
package A;
use strict;
use warnings;
use B;
..........
B::get_database_information_for_file(..)
..........
sub validate_decrypted_mark { ...... }
sub decrypt_mark {..........}
.....
B.pm
package B;
use strict;
use warnings;
use C;
..........
C::mark_file(..)
..........
sub db_connect { ...... }
sub get_database_information_for_file {..........}
.....
C.pm
package C;
use strict;
use warnings;
use A;
..........
A::decrypt_mark(..)
..........
sub mark_file { ...... }
sub read_mark {..........}
sub write_mark {..........}
sub examine_mark {..........}
.....
很少有多個附加信息(這可能是有用的)
這些警告顯示,當我們從最近的Solaris /阿帕奇搬到了LAMP。
我們使用mod_perl,所以有可能模塊已經在內存中了?
=====
你好,
我搜索堆棧溢出,發現我的問題的根本原因。
但我有比上面線程指定一個不同的情況。我的問題是,我得到Perl中的子程序重新定義錯誤(與上述線程中指定的相同)。但我的問題在於循環參考和/或最佳實踐。我有以下情形,這是導致子程序重新定義警告
套餐A --uses->套餐B --uses->套餐C --uses->套餐A
由於包C使用包A,顯然我會重新定義子例程警告。但我的問題是,這是一種糟糕的編程習慣嗎?最佳實踐角度的想法是什麼?
我無法避免這種引用,因爲程序包C需要使用程序包A中定義的子程序。「Grant McLean」在上述線程中有一個很好的建議,用於我上面給出的情況。我不想避免這些警告,因爲這些警告可能表明一些問題。
真的很感謝你的時間和幫助。
感謝你,
我們需要查看更多的代碼。我的猜測是,你在命名你的文件,但不是在頂部用'package xyz;'行來聲明它們,所以你的所有子程序都被轉儲到'package main;'請寄出每個包的前幾行包裝聲明(如果存在的話)以及任何'use' /'require'行) – 2011-02-24 20:29:09
一般來說,如果您需要循環進口,您的設計會出現可怕的錯誤。 – geoffspear 2011-02-24 21:21:07
謝謝Eric&Wooble的評論。我已經爲您的評論添加了示例代碼。 – Venu 2011-02-25 23:47:09