创建自定义模块

这不是完整的OO perl教程

但是,我认为解释一些基本概念并允许某些用户简化软件设计过程可能是有益的。

我发现创建自己的“自定义”模块非常有用且有益。 它(除其他事项外)使您可以减少键入次数。 或者使击键更重要,但是请您仔细看看。 (如果您确实看的话。)

读者在阅读本文之前应熟悉的事项:

  • 参考文献
  • 编写和使用子例程
  • Perl中的主要三种数据“类型”

首先,您将在处理OO perl时听到很多新术语。 (这是面向对象的),但是不要气that,这只是perl程序员“ Hubris”的第三个优点。 我们喜欢给别人听不懂的东西冠以幻想的名字,并因此而得到老板更多的报酬。

对象 -对象只是一种数据类型。 它很像一个哈希(如果需要),一个数组或一个子例程。 对象是对计算机内存中存储的信息的引用。 它是多维实体的标量版本。 但基本上,一个对象只是为您提供“属性”和“方法”。 如果您有一个“女朋友”对象,(希望她)它将具有以下属性:头发颜色,眼睛颜色,身高,性吸引力(在这里与我的手指交叉)。 她还将拥有一些方法,这些方法仅仅是她可以执行的“动作”。 或与她相关联的“子程序”。 她可能有一个“握住我的手”的方法,当被调用时,会使她在一群陌生人中寻找你,而....(鼓声)握住你的手。

拥有一个对象的好处是,您现在知道它可以做什么事情,并且可以访问它的所有属性。

就在一个整洁的地方。

-类仅仅是一个“包”,或者是一个对象将是什么以及它可以做什么的定义。 如果它存在的话。

对象属于类。 女朋友对象不会与“姐妹”对象来自同一类。 (除非您来自WV heheheee .. j / k)

-包是文件。 这是一个定义类的perl脚本。 您编写了程序包,然后将它们放在Perl / lib目录中。 然后,您可以通过“ use”关键字在其他脚本中使用它们。 让我们看一个例子

你们中的许多人都将熟悉CGI模块,因此让我们看一个简单的脚本并将其分开。


#!/usr/bin/perl  
use strict;
use CGI; 
my $q = CGI->new(); 
print $q->redirect( -url =>'somewhere', -cookie => 'chocolatechip');   
现在,这里发生的是:

我们正在将新脚本与CGI包,脚本,文件或“类”相关联。 因此,现在我们可以访问它的构造方法。 构造函数方法只是使对象“栩栩如生”的子例程。 这是通过perls的“祝福”功能完成的。 稍后再说...

然后,(这很重要)我们创建了一个名为“ $ q”的CGI对象。 您会看到在此之前我们没有CGI对象,我们只是CGI类对象的“蓝图”。

接下来,我们调用对象的“重定向”方法。 哪种方法(就像方法一样)执行更改位置的任务。

 
print $q->redirect( -url =>'somewhere', -cookie => 'chocolatechip');  
好吧,让我们变脏

让我们创建一个包。

这是通过package关键字完成的。 您必须首先仔细考虑使用什么来命名软件包,因为这也将是您的类的名称和文件的名称。 软件包的扩展名为.pm。 因此,创建一个文本文件(在您喜欢的文本编辑器中,但不要在Word中,或任何添加丰富字符格式的程序。我们需要纯ASCII文本),并将其命名为Girlfriend.pm。

始终使用首字母大写字母来命名您的包装,perl保留小写的包装用于实用说明,例如“ strict”。

然后在新文件中输入以下内容:


package Girlfriend;  
1; 
将此文件保存在perl“ lib”目录中。 在Windows上,它是C:/ Perl / lib。

而已!!

现在,您可以“使用”新软件包了。

注意,我们不需要列出Perl的路径。 我们也不需要CHMOD 755 Girlfriend.pm文件。 但是,您需要包括“ 1;”。 最后,以便另一个脚本可以“使用”此文件。 最后一条语句必须为真值。 这是最简单的方法。

您现在可以创建另一个脚本并输入;

 
#!/usr/bin/perl 
use strict;
use Girlfriend;  
在它的顶部。

你说:“这个包没用”。

没错,我们尚未为Girlfriend对象提供任何属性或方法。 (听起来很熟悉)

让我们修复它。

首先定义一个“构造函数”方法。 返回到Girlfriend.pm文件并添加。

  
sub new { 
my $class = @_; 
my $self  = {};
$self->{hairColor} = undef;
$self->{height} = undef;
$self->{friends} = []; 
return bless($self, $class);
}  
啊哈! 有魔术。

返回祝福($ self,$ class);

这将读取这些属性并将其与Girlfriend类的任何对象相关联。

现在在其他脚本中添加。

 
my $jane = Girlfriend->new(); 
现在我们有了一个对象。

我们可以轻松地填充它的属性。

 
$jane->{hairColor} = "brown";
$jane->{friends} = ["Sally", "Jim", "Angie"];  
我们也可以写一个女朋友的方法。

在“新”子项之后添加:

 
sub smile { 
print ":-)";
}  
然后在其他脚本中使用它。

$jane->smile;  
这将在标准输出上打印“ :-)”。

请注意,当我们为属性添加值时,它们已添加到“女朋友”“类”的$ jane对象中。 不属于班级本身。

我们也可以创建其他“女朋友”对象。 (尽管不建议使用hehheee)


 my $sara = Girlfriend->new();
$sara->{height} = "TooTall"; 
etc... 
然后,我们可以拥有两个具有不同属性的对象,它们共享相同的“结构”或类。 但是,方法可能会根据其属性不同而作用不同。 像这样改变微笑子。
 
sub smile {
my $this = @_; 
if ($this->{height} =~ /TooTall/){
  print ":-(";
}
else{
print ":-)";
  }
} 
现在在其他脚本中,如果我们调用smile方法,并且“ TooTall”不是height的值,那么我们会得到一个微笑,否则会皱眉。

现在,我们将从中得到一个微笑:

 
$jane->smile; 
但是对此皱眉:
 
$sara->smile; 
这就是所谓的多态。

您是否注意到$ this变量?

您会看到,当您调用“类方法”时,发送给子对象的第一个参数是您正在处理的对象。

因此参数列表为:$ jane。

如果添加其他内容,例如:

 
$jane->smile('Hello');  
参数列表为:

“ $ jane”,“ Hello”。

请记住,$ jane是对对象的引用,因此我们可以在子目录中访问其属性,例如:


$this->{height};  
您可以通过以下方式直接访问类方法:
 
Girlfriend::smile();  
但是不建议这样做。 好吧,OO perl演讲就足够了。

有很多很好的教程可以教您入门和入门。

其中一些位于本文的底部。

让我给你一个例子,用它来减少打字,并简化编码/调试。

假设您有一个重复的任务,总是需要完成。

使用您说的子例程!

是的,但是如果此任务发生在

每个脚本。 您仍然必须在每个脚本中编写该“ sub”。

假设您想知道用户是否已登录,是否想要知道有关用户的某些信息,所有这些信息都存储在数据库中。

您可以创建一个“用户”模块。


package User; 
use strict;
use DBI; 
my $database = "the database";
my $handle = "yourHandle";
my $pass = "yourPassword"; 
my $dbh = DBI->connect("DBI:mysql:$database:localhost", $handle, $password) || die "Error: $DBI::errstr";  
sub new { 
my ($class, $id) = @_; 
my $sth = $dbh->prepare(qq~ SELECT * FROM users WHERE id = ? ~);
$sth->execute($id); 
my $user = $sth->fetchrow_hashref;
$sth->finish; 
return bless($user, $class); 
} 
$dbh->disconnect; 
1; 
现在,在您的脚本中,您可以轻松地检查它们是否已登录,以及是否可以访问“ users”表记录中的所有与“ id”相关联的列,如下所示。 (假设您将其ID号存储在Cookie中。)
 
#!/usr/bin/perl 
use strict;
use CGI;
use User; 
my $q = CGI->new(); 
if(my $v = $q->cookie('name'){
   my $user = User->new($v);
}  
# Asumming they were loggin in.... 
print "Hello, $user->{username}, I see you have been a member since: $user->{joined}, would you like to update your email address? We have: $user->{email}";  
那就是如果您使用的是mysql数据库,并且在users表中具有“ username”,“ joined”和“ email”列。

继续尝试一下!!

我什至没有为用户模块编写方法。

请务必查看以下这些链接:

汤姆的OO教程

优秀的PDF!

Perl培训澳大利亚风格

From: https://bytes.com/topic/perl/insights/766714-creating-custom-modules

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值