package Foo;
use strict;
use warnings;
use Exporter;
our @ISA= qw( Exporter );
# these CAN be exported.
our @EXPORT_OK = qw( export_me export_me_too );
# these are exported by default.
our @EXPORT = qw( export_me );
sub export_me {
# stuff
}
sub export_me_too {
# stuff
}
1;
在主程序中:
use strict;
use warnings;
use Foo; # import default list of items.
export_me( 1 );
或同时获取两个函数:
use strict;
use warnings;
use Foo qw( export_me export_me_too ); # import listed items
export_me( 1 );
export_me_too( 1 );
我知道这个问题特别提到了“函数”,但是当我搜索“perl include”时,我会在搜索结果中找到这个帖子,而且经常(比如现在)我想包含变量(以一种简单的方式,而不必考虑模块)。所以我希望可以在这里发布我的例子(另请参见:Perl require and variables;简而言之:使用require,并确保“includer”和“includee”文件都将变量声明为our):
$ perl --version
This is perl, v5.10.1 (*) built for i686-linux-gnu-thread-multi ...
$ cat inc.pl
use warnings;
use strict;
our $xxx = "Testing";
1;
$ cat testA.pl
use warnings;
use strict;
require "inc.pl";
our $xxx;
print "1-$xxx-\n";
print "Done\n";
$ perl testA.pl
1-Testing-
Done
$ cat testB.pl
use warnings;
use strict;
our $xxx;
print "1-$xxx-\n";
$xxx="Z";
print "2-$xxx-\n";
require "inc.pl";
print "3-$xxx-\n";
print "Done\n";
$ perl testB.pl
Use of uninitialized value $xxx in concatenation (.) or string at testB.pl line 5.
1--
2-Z-
3-Testing-
Done
9条答案
按热度按时间pgvzfuti1#
使用模块。检查perldoc perlmod和Exporter。
在文件www.example.com中Foo.pm
在主程序中:
或同时获取两个函数:
您也可以导入包变量,但强烈建议不要这样做。
noj0wjuj2#
Perl require将完成这项工作。
在文件的末尾。
下面是一个很小的例子:
但请尽快迁移到模块。
编辑
将代码从脚本迁移到模块的几个好处:
require
包含的档案只会在执行阶段载入,而use
所载入的套件则会接受较早的编译阶段检查。eivgtgni3#
此外,
do 'file.pl';
也可以工作,但模块是更好的解决方案。1cklez4t4#
我相信您正在寻找require或use关键字。
4sup72z85#
我知道这个问题特别提到了“函数”,但是当我搜索“perl include”时,我会在搜索结果中找到这个帖子,而且经常(比如现在)我想包含变量(以一种简单的方式,而不必考虑模块)。所以我希望可以在这里发布我的例子(另请参见:Perl require and variables;简而言之:使用
require
,并确保“includer”和“includee”文件都将变量声明为our
):pnwntuvh6#
你真的应该研究一下perl模块,但是,为了快速破解,你可以运行“perl -P”,它通过C预处理器运行你的perl脚本。这意味着你可以做#include和friends......
只有一个快速黑客虽然,小心;- )
3wabscal7#
您要寻找的是'require file.pl',但您应该寻找的是'use module'。
xxls0lw88#
以上答案都忽略了客户端部分:如何导入模块。
请在此处查看可接受的答案:How do I use a Perl module from a relative location?
如果没有这个答案中的技巧,当你
use $mymodule;
时,你将很难获得正确的模块路径z31licg09#
require
大致等同于include。所有命名空间的好处都可以在所需的Perl脚本中实现,就像Perl模块一样。“魔力”在于你在脚本中放入了什么。对包含脚本的唯一警告是,您需要在脚本的末尾输入
return 1;
,否则perl会说它失败了,即使您没有在脚本中调用任何内容。require "./trims.pl"
那么在你的Perl脚本中,它就可以像这样简单:
此示例删除输入字符串的左、右或两端白色。
$string = trim($string);
#use "trims.pl"
的注解可以粘贴到您的Perl脚本中,取消注解(删除#),Perl将在您的脚本所在的同一个文件夹中查找trims.pl,这会将函数ltrim()、rtrim()和trim()放入全局名称空间,因此您不能将这些函数名放在任何其他全局名称空间中,否则Perl将检测到冲突并停止执行。要了解有关控制命名空间的更多信息,请查看“perl packages & modules”
package Foo;
https://perldoc.perl.org/functions/package