Perl:调用第二个模块的脚本和模块

Perl:调用第二个模块的脚本和模块,perl,module,Perl,Module,我有以下资料: 模块1 当脚本调用模块1中的子模块,而该子模块又调用模块2中的子模块时,即使脚本可以直接调用这些子模块,也找不到该子模块 无论如何,我都不是Perl的初学者,但我从未完全掌握模块的诀窍。我们的环境变得非常依赖于模块2,因此我不想做任何需要更改所有使用它的脚本的更改模块1的使用有限,因此我可以在必要时对其进行更改。文件名、package指令中的名称和use语句中的名称必须匹配,这包括大小写 Module1.pm package Module1; use Module1; 或

我有以下资料:

模块1 当脚本调用
模块1
中的子模块,而该子模块又调用
模块2
中的子模块时,即使脚本可以直接调用这些子模块,也找不到该子模块


无论如何,我都不是Perl的初学者,但我从未完全掌握模块的诀窍。我们的环境变得非常依赖于
模块2
,因此我不想做任何需要更改所有使用它的脚本的更改<代码>模块1的使用有限,因此我可以在必要时对其进行更改。

文件名、package指令中的名称和
use
语句中的名称必须匹配,这包括大小写

 Module1.pm
 package Module1;
 use Module1;
或者如果您有一个非平面名称空间

 Foo/Bar.pm
 package Foo::Bar;
 use Foo::Bar;
请注意,当您有两个相互使用(直接或间接)的导出模块时,您可以使用类似的功能,但情况似乎并非如此



首先,模块名是区分大小写的,所以您不想说
packagemodule2<代码>使用模块2。即使这在Windows上“起作用”,你也会很快遇到问题
是一种向后的方法,已被
使用导出器qw(导入)取代十年前!请明确模块的文件名和包名。您有
module2
module2
module2
,如果您真的在使用所有这些变体,那么您的代码不起作用也就不足为奇了。模块文件是否以
.pm
结尾?不能在Perl函数上使用原型。只是
子M1S1{…}
等是正确的。
use Module2;
use Module1;

$y = M1S1();
$z = M2S2();
 Module1.pm
 package Module1;
 use Module1;
 Foo/Bar.pm
 package Foo::Bar;
 use Foo::Bar;
$ cat Module1.pm
package Module1;
use strict;
use warnings;
use Exporter qw( import );
our @EXPORT = qw( M1S1 );
use Module2;
sub M1S1 { M2S1() }
1;

$ cat Module2.pm
package Module2;
use strict;
use warnings;
use Exporter qw( import );
our @EXPORT = qw( M2S1 M2S2 );
sub M2S1 { "M2S1" }
sub M2S2 { "M2S2" }
1;

$ cat script.pl
#!/usr/bin/perl
use strict;
use warnings;
use Module2;
use Module1;
print(M1S1(), "\n");
print(M2S2(), "\n");

$ ./script.pl
M2S1
M2S2