perl的包

15 篇文章 0 订阅

(相当于python的类)

建一个:/mnt/lustre/user/wubin/01.Program/Scripts/01.script/GeneLab/package/test.pm

#!/usr/bin/perl -w
package package::test;
require Exporter;
use strict;
use warnings;
use File::Basename;
our @ISA = qw(Exporter);
our @EXPORT = qw(add2,add); #这里添加了add2,add2就可以直接使用,而不必带包名或对象名
our @version = 1.0;


sub new{
	my ($class,$file) = @_;
	my $self = bless {}, $class;
	return $self;
}

sub add{
	my ($self, $a, $b) = @_;
	my $c = $a + $b;
	return($c);
}

sub add2{
	my ($a, $b) = @_;
	my $c = $a + $b;
	return($c);
}


1;

再建一个 b.pl脚本:

$cat b.pl
#!/usr/bin/perl -w
use strict;
use lib '/mnt/lustre/user/wubin/01.Program/Scripts/01.script/GeneLab';
use package::test;

my $object = package::test->new(); #这个过程相当于python里面类的实例化
my $c = $object->add(3,2);
print "$c\n";

再建一个c.pl

#!/usr/bin/perl -w
use strict;
use lib '/mnt/lustre/user/wubin/01.Program/Scripts/01.script/GeneLab';
use package::test;

my $object = bless {}, 'package::test';
my $c = $object->add(3,2);
print "$c\n";

可以看出,b.pl 和c.pl是一样的。 一个在包里面bless,一个在外面脚本(c.pl)里bless。

不过一般b.pl这种方式更好

再建一个d.pl:

#!/usr/bin/perl -w
use strict;
use lib '/mnt/lustre/user/wubin/01.Program/Scripts/01.script/GeneLab';
use package::test;

my $object = package::test->new();
my $c = add2(3,2);
print "$c\n";

注意,$object = bless {}, "package::test"之后,

$object->add(3,2)  相当于 package::test->add(3,2)

                           也相当于package::test::add('package::test',3,2)

也就是说,'->'调用方式,第一个参数是对象本身,这个参数是隐含的。

而package::test::add这种调用方式,则没有隐含的第一个参数。

注意,d.pl中,可以直接用add2(3,2), 却不能直接用add(3,2),

即使在package/test.pm中的@EXPORT中添加了add,也不能使用。

原因是add方法要求有3个参数。

sub add{
	my ($self, $a, $b) = @_;
	my $c = $a + $b;
	return($c);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值