首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何编写包装器模块?

如何编写包装器模块?
EN

Stack Overflow用户
提问于 2013-06-10 15:10:47
回答 1查看 1.2K关注 0票数 4

我正在写一个下载子模块,我希望它看起来像这样:

代码语言:javascript
运行
复制
 Download.pm
 Download/Wget.pm
 Download/LWP.pm
 Download/Curl.pm
 Download/Socket.pm

我的Download.pm应该提供一个sub download($url)接口。它将查找LWP模块,然后查找wget命令,然后查找curl命令,如果这两个命令都不存在,它将使用Socket

如何编写包装器模块?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-10 16:48:56

这里有一些例子,我是如何做到的:它是如何工作的?它检查某个条件,并根据这个条件创建对象。子例程还检查引用类型并调用正确的方法

文件/tmp/Adapt/Base.pm (基本模块):

代码语言:javascript
运行
复制
#!/usr/bin/perl

package Adapt::Base;

use strict;
use warnings;

sub new {
    my $class = shift;
    my $self;
    if ( time % 3 ) {
        require "/tmp/Adapt/First.pm";
        $self = \Adapt::First->new(@_);
    }
    elsif ( time % 2 ){
        require "/tmp/Adapt/Second.pm";
        $self = \Adapt::Second->new(@_);
    }
    else {
        require "/tmp/Adapt/Default.pm";
        $self = \Adapt::Default->new(@_); 
    }
    bless( $self, $class );
}

sub somesub {
    my $s = shift;
    my $self = $$s;
    if ( ref( $self ) eq 'Adapt::First' ) {
        $self->firstsub();
    }
    elsif ( ref( $self ) eq 'Adapt::Second' ) {
        $self->secondsub();
    }
    else {
        $self->defaultsub();
    }
}

1;

文件/tmp/Adapt/First.pm (一些模块):

代码语言:javascript
运行
复制
#!/usr/bin/perl

package Adapt::First;

use strict;
use warnings;

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

sub firstsub {
    print "I am 1st sub.\n";
}

1;

文件/tmp/Adapt/Second.pm .tmp(另一个模块):

代码语言:javascript
运行
复制
#!/usr/bin/perl

package Adapt::Second;

use strict;
use warnings;

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

sub secondsub {
    print "I am 2nd sub.\n";
}

1;

和文件/tmp/Adapt/Default.pm (默认模块):

代码语言:javascript
运行
复制
#!/usr/bin/perl

package Adapt::Default;

use strict;
use warnings;

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

sub defaultsub {
    print "I am default sub.\n";
}

1;

和测试脚本:

代码语言:javascript
运行
复制
#!/usr/bin/perl

use strict;
use warnings;

require '/tmp/Adapt/Base.pm';

for (0..10) {
    my $test = Adapt::Base->new;
    $test->somesub;
    sleep 1;
}

输出:

代码语言:javascript
运行
复制
dev# perl /tmp/adapt.pl
I am default sub.
I am 1st sub.
I am 1st sub.
I am 2nd sub.
I am 1st sub.
I am 1st sub.
I am default sub.
I am 1st sub.
I am 1st sub.
I am 2nd sub.
I am 1st sub.
dev# 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17018553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档