Chinaunix首页 | 论坛 | 博客
  • 博客访问: 146949
  • 博文数量: 56
  • 博客积分: 245
  • 博客等级: 二等列兵
  • 技术积分: 520
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-08 14:43
个人简介

慢慢来

文章分类

全部博文(56)

文章存档

2017年(5)

2016年(2)

2015年(6)

2014年(28)

2013年(5)

2012年(10)

我的朋友

分类: PERL

2014-07-02 11:38:23

对于Perl这种脚本语言,简易开发和效率当然是首要考虑的因素,但是我们工作中主要以Perl为主,所以或多或少能接触到用面向对象程序设计的一些概念,开发的一些模块会更简明,易懂,易维护。

Perl没有那么严格的定义,常规的package / use / require 确实可以解决简单的问题,CPAN提供了Moose模块,使面向对象的开发过程更加简单。

 截止到2014/7/1的Moose开发模块,可能随着CPAN更新可能会访问不到,google一下~

看个简单例子:

点击(此处)折叠或打开

  1. package Animal;

  2. use Moose;

  3. has 'name'=> (
  4.   is => 'rw',
  5.   isa => 'Str',
  6. );

  7. sub whatamI {
  8.     my $self = shift;
  9.     print "This is a $self->{name}\n";
  10. }

这就是一个简单的Animal类,我们可以把它当作是父类,可以写一个子类:

点击(此处)折叠或打开

  1. package Duck;

  2. use Moose;

  3. extends 'Animal';

  4. has 'flyable' => (
  5.   is => 'rw',
  6.   isa => 'Bool',
  7.   default => 1,
  8. );
  9.  
  10. sub fly {
  11.   my $self = shift;
  12.   if ($self->flyable){
  13.     print "It can fly\n";
  14.   }
  15.   else {
  16.     print "Wow it can't fly\n";
  17.   }
  18. }

`package` 是打成包的名字,具体不讲了,目录用'::'细分。
`use Moose;` 时也会自动调用 use strict 和 warnings
`has ' ' => ( ); ` 表示定义了一个类中的变量
`sub xx { }` 定义了一个类的函数  # 不要像 objective-c 里那样随便定义函数名称,过长的名字可能会引起一些bug...


点击(此处)折叠或打开

  1. #main

  2. use Duck;

  3. my $duck_object = Duck->new(
  4.   name => 'duck',
  5.   flyable => 1,
  6. );

  7. $duck_object->whatamI();

定义了 $duck_object 后,调用函数时会将$duck_object当做第一个参数传进去,也就是上述的 $self。

更加详细的属性和继承方法还是去看看cpan或者 要好一些

阅读(1598) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~