zoukankan      html  css  js  c++  java
  • Perl 学习手札之十四: Module

    Modules are collections of Perl code for use with different scripts

    Modules can be object-oriented or procedural

    Modules can contain code and/or data

    Object-oriented vs procedural modules

     Most modules are object-oriented.

     object-oriented code has these properties.

     -Dynamic: the object determines what code to invoke

     -Encapsulated: the object contains all the code and data it needs

     -Abstraction: the details may be hidden from the user

     -Inheritance: One object may inherit properties from another

    Procedural code has these properties:

     -simplicity: small subroutines may be coded quickly and easily

     -Modularity: Functionalities may be used and resused

     -Linearity: code is clear and readable

    建立一个module:Example.pm

    #Example.pm
    #  Example perl module
    #


    package Example;
    use strict;
    use warnings;
    use IO::File;

    our $VERSION = "0.1";

    sub new{
        my $class = shift;
        my $self = {};
        bless($self,$class);
        return $self;
    }

    sub copyfile

        my ( $self$origfile$newfile ) = @_;
        my $bufsize = 1024 * 1024;

        my $origfh = IO::File->new($origfile'r') or die("cannot open $origfile ($!)");
        my $newfh = IO::File->new($newfile'w') or die("cannot open $newfile ($!)");

        $origfh->binmode(":raw");
        $newfh->binmode(":raw");

        my $buf = '';
        while$origfh->read$buf$bufsize ) ) {
            $newfh->print$buf ); 
        }
        return 1;
    }

    1;

     这个就是前面的复制文件的代码,现在写到模块里面,注意package关键字。

    下面就是调用模块的代码:

    creating.pl

    #!/usr/bin/perl
    #

    use strict;
    use warnings;
    use Example;

    main(@ARGV);

    sub main
    {
        my $o = Example->new();
        $o->copyfile("olives.jpg","newfile.jpg");
        message("Done.");
    }

    sub message
    {
        my $m = shift or return;
        print("$m\n");
    }

    sub error
    {
        my $e = shift || 'unkown error';
        print("$0: $e\n");
        exit 0;
    }

     如前面所示:用了module,代码变得非常简洁,并且可以复用。

    下面写一个模块:

    Artist.pm

    # Artist.pm

    # Description goes here
    # by Your Name
    #


    package Artist;
    use strict;
    use warnings;

    our $VERSION = "0.1";

    sub new
    {
        my $class = shift;
        my $self  = {};

        bless$self$class );
        return $self;
    }

    sub name 
    {
        my ($self,$name) = @_;
        $self->{name}=$name if defined $name;
        return $self->{name};
    }

    1;

    __END__

    =head1 NAME

    Template - Description goes here

    =head1 SYNOPSIS

        use Template
        my $o = Template->new;

    =head1 METHODS

    =over 4

    =item B<new>

    Constructs a new Template object. 

    Returns a blessed Template object reference.

    =item B<method>

    Describe the method here 

    =back

    =head1 AUTHOR

    Written by Your Name

    =head1 HISTORY

        Version history here. 

    =cut

     在__END__后面的部分是模块的注释。可以根据这个例子学习模块的编写

     然后调用模块:

    oodata.pl

    #!/usr/bin/perl
    #

    use strict;
    use warnings;
    use Artist;

    main(@ARGV);

    sub main
    {
        my $o = Artist->new;
        my $o2=Artist->new;
        $o->name("Jimi Hendrix");
        $o2->name("Miles Davis");
        message($o->name);
        message($o2->name);
        message($Artist::VERSION);
        message($o->VERSION);
    }

    sub message
    {
        my $m = shift or return;
        print("$m\n");
    }

    sub error
    {
        my $e = shift || 'unkown error';
        print("$0: $e\n");
        exit 0;
    }

     可以有几种方式初始化模块,然后调用模块。

     安装模块

    1. 可以在unix-like系统里面采用下面的方式:

      1):在命令行里面输入:sudo cpan 模块名

      2):在命令行里面输入perl -MCPAN -e shell, 然后进入CPAN>模式,输入install 模块名,完成安装。

      3) :在search.cpan.org里面查找模块,下载相应的tar.gz安装包,然后依次输入:

           perl MAKEFILE.pl 

           make

           make test

           make install

           然后完成安装。

    2. 可以在windows系统下面采用下面的方式:

    选择active perl->perl package manager来在图形界面下选择相应的安装包安装升级

     注意dependance

  • 相关阅读:
    Spring学习笔记02-配置bean(第七周)
    Spring学习笔记01
    构建之法阅读笔记02
    keep running-团队视频分析初步总结
    影视分享App(三)(第六周)
    Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配
    Delphi 正则表达式语法(5): 边界
    Delphi 正则表达式语法(4): 常用转义字符与 .
    Delphi 正则表达式语法(3): 匹配范围
    Delphi 正则表达式语法(2): 或者与重复
  • 原文地址:https://www.cnblogs.com/hanleilei/p/2403329.html
Copyright © 2011-2022 走看看