每个模块的简要概述。(我认为这是向帖子中添加更多信息的正确方法。对不起,因为这是我第一次发布)
A.pm-包含可重用的例程,以读取ZIP文件,解密内容,进行验证等(由各种CGI文件,命令行脚本和其他Perl模块使用)
B.pm-这是Utils文件,它连接到DB,所有与SQL相关的子例程,并调用C.pm在每个文件中写入标记
C.pm-专门的例程,用于在ZIP中标记每个文件,类似于校验和(检查允许的文件类型,读取文件,写入文件,检查等),使用A.pm,因为该模块需要解密内容,执行验证通过A.pm
包括一些示例代码(我在这里只张贴了几行使用行;显然,.pm中使用了许多模块)
下午
package A;
use strict;
use warnings;
use B;
..........
B::get_database_information_for_file(..)
..........
sub validate_decrypted_mark { ...... }
sub decrypt_mark {..........}
Run Code Online (Sandbox Code Playgroud)
.....
下午
package B;
use strict;
use warnings;
use C;
..........
C::mark_file(..)
..........
sub db_connect { ...... }
sub get_database_information_for_file {..........}
Run Code Online (Sandbox Code Playgroud)
.....
下午
package C;
use strict;
use warnings;
use A;
..........
A::decrypt_mark(..)
..........
sub mark_file { ...... }
sub read_mark {..........}
sub write_mark {..........}
sub examine_mark {..........}
Run Code Online (Sandbox Code Playgroud)
.....
很少有其他信息(可能有用)
当我们最近从Solaris / Apache迁移到LAMP时,将显示这些警告。
我们使用mod_perl,所以该模块可能已经在内存中了吗?
=====
你好,
我在Stack Overflow上进行了搜索,找到了导致此问题的根本原因。
但是我与上述线程中指定的情况不同。我的问题是,我在Perl中得到子例程重新定义的错误(与上述线程中指定的错误相同)。但是我的问题是关于循环参考和/或最佳实践的。我有以下情况,这导致子例程重新定义警告
软件包A --uses->软件包B --uses->软件包C --uses->软件包A
由于软件包C使用软件包A,显然我将重新定义子例程警告。但是我的问题是,这样做是不好的编程习惯吗?从最佳实践角度有什么想法?
我不能回避此引用,因为程序包C需要使用程序包A中定义的子例程。对于上述情况,“ Grant McLean”在上述线程中提出了很好的建议。我不想避免这些警告,因为这些警告可能表示一些问题。
非常感谢您的时间和帮助。
感谢您,
循环使用通常不应向您提供子例程重新定义的警告,除非您直接执行其中一个程序包而不执行使用/要求。有时人们尝试通过这种方式进行语法检查:
perl -c Foo.pm
Run Code Online (Sandbox Code Playgroud)
相反,他们应该做
perl -e'use Foo'
Run Code Online (Sandbox Code Playgroud)
那么,您是否可以准确地分享引发子例程重新定义警告的操作?
| 归档时间: |
|
| 查看次数: |
3895 次 |
| 最近记录: |