我是perl的新手,我正在尝试执行此练习,但是它不起作用。
这是我创建的模块。
#!/usr/bin/perl
use warnings;
use strict;
package Prepare;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw( clean my_print );
sub clean{
return chomp($_[0]);
}
sub my_print{
return print("The Results: $_[0]\n");
}
1;
这是我的脚本test_lib.pl
#!/usr/bin/perl
use warnings;
use strict;
use lib '/home/foobar/code';
use My::Prepare;
print "Enter a word: ";
my $input=<STDIN>;
print "You entered: $varia";
clean($input);
my_print($input);
我收到此错误:
Undefined subroutine &main::clean called at ./test_lib.pl line 13, <STDIN> line 1.
答案 0 :(得分:10)
在包命名方面,需要达成三点共识:
他们需要“同意”如下。
如果文件中的软件包声明为package My::Package;
,则该软件包需要用作use My::Package
,其文件为目录Package.pm
中的My
。
此目录My
本身需要位于解释器将搜索的位置,或者我们需要通知它在哪里寻找。自定义包通常不在默认搜索的目录中,lib pragma的作用是:使用您的
use lib '/home/foobar/code';
我希望其中有My
的{{1}}目录位于Package.pm
目录中。
这是您的示例,具有固定名称和更多调整。
文件/home/foobar/code
:
/home/foobar/code/My/Prepare.pm
以及使用此模块的脚本
package My::Prepare;
use warnings;
use strict;
use Exporter qw(import);
our @EXPORT_OK = qw( clean my_print );
sub clean { return chomp $_[0] }
sub my_print { print "The Results: $_[0]\n" }
1;
请通过添加或删除适当的路径组件来调整实际目录结构上方的路径。 #!/usr/bin/perl
use warnings;
use strict;
use lib '/home/foobar/code';
use My::Prepare qw(clean my_print);
print "Enter a word: ";
my $input = <STDIN>;
print "You entered: $input";
my $cleaned_input = clean($input);
my_print($cleaned_input);
特别突出。
一些注意事项。
模块中不需要“ shebang”行(My::
)
使用上面的Exporter有点现代
我强烈建议使用#!/usr/bin/perl
(而不是@EXPORT_OK
),以便所有列出的符号必须由模块用户专门导入。那对每个人都更好