目录

perl的package中Subroutine-new-redefined问题

目录

perl的package中“Subroutine new redefined”问题

我在一个脚本run_PMseq.V8.pl调用了一些.pm文件

$perl -c run_PMseq.V8.pl
Subroutine new redefined at /mnt/lustre/user/wubin/01.Program/Scripts/01.script/GeneLab/PMSeq/package_V3/Add_mismatch.pm line 25.
Subroutine generate_shell redefined at /mnt/lustre/user/wubin/01.Program/Scripts/01.script/GeneLab/PMSeq/package_V3/Add_mismatch.pm line 32.
Subroutine get_all_shell redefined at /mnt/lustre/user/wubin/01.Program/Scripts/01.script/GeneLab/PMSeq/package_V3/Add_mismatch.pm line 133.
run_PMseq.V8.pl syntax OK

检查的时候发现这个错误。

后来才发现问题在这里:

https://i-blog.csdnimg.cn/direct/240d911346e042b298b85c59dbd1d927.png

package的名没有与pm文件的文件名一致。

应该改成:

package Add_mismatch;

原因是,我在  run_PMseq.V8.pl脚本里面这样调用的:

use Map_PMDB;
use Add_mismatch;

这样做的后果就是, 调用 Map_PMDB.pm的时候, 存在new,generate_shell,get_all_shell等方法。

当我调用“Add_mismatch.pm”的时候, 由于我写的是“package Map_PMDB”, 程序认为我调用的仍然是Map_PMDB,而Add_mismatch.pm中也存在new,generate_shell,get_all_shell等方法。

这就导致程序认为我将Map_PMDB模块中的new,generate_shell,get_all_shell等方法做了"redefine(重定义,重写)“操作。