Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 面向对象设计建议_Perl_Perl Module - Fatal编程技术网

Perl 面向对象设计建议

Perl 面向对象设计建议,perl,perl-module,Perl,Perl Module,我有一组文件需要通过电子邮件或FTPed(从配置中读取)发送。在执行这两项操作之前,我需要对文件执行一些常见操作,如更改文件名、健全性检查等 package Class::Foo::Partners; use Carp; use Data::Dumper; # Sanity check and Blessing sub new ($) { my $class = shift; my %attr = @_;

我有一组文件需要通过电子邮件或FTPed(从配置中读取)发送。在执行这两项操作之前,我需要对文件执行一些常见操作,如更改文件名、健全性检查等

        package Class::Foo::Partners;

    use Carp;
    use Data::Dumper;
    # Sanity check and Blessing
    sub new ($) {
        my $class = shift;
        my %attr = @_;
        Carp::confess('Config undefined') unless defined $attr{cfg};
        my $self = bless({}, $class);
        %$self = @_;
        return $self;
    }

    sub process {
        my $self = shift;

        my %filestoupload = ();
        if ($self->{dbh}->sql($sql, \%filestoupload)) {
            my $stats;
            if (defined $self->{cfg}->{$self->{section}}->{pdf_email_rcpt}) {
                $stats = Class::Foo::Email->new(section => $self->{cfg}->{$self->{section}}, filestoupload => \%filestoupload);
                $stats->sendfiles;
            } else {
                $stats = Class::Foo::FTP->new(section => $self->{cfg}->{$self->{section}}, filestoupload => \%filestoupload);
                $stats->sendfiles;
            }
        } elsif ($self->{dbh}->{_error}) {
            Carp::confess($self->{dbh}->{_error});
        } else {
            print "NO FILES";
        }
    }


    package Class::Foo::FTP;

    use Carp;
    use Data::Dumper;
    use POSIX qw( strftime );
    use File::Temp qw (tempdir) ;
    use File::Copy;
    use Net::FTP;

    # Sanity check and Blessing
    sub new ($) {
        my $class = shift;
        my %attr = @_;
        Carp::confess('Section undefined') unless defined $attr{section};
        Carp::confess('undefined ftp_host') unless defined $attr{section}->{ftp_host};


        my $self = bless({}, $class);
        %$self = @_;

        return $self;
    }

    sub sendfiles {
        my $self = shift;
        return unless(keys %{$self->{filestoupload}});
        #DO SOME COMMON TASK
        ..
        $self->ftp_connect();
        ..
        ..
    }

    package Class::Foo::Email;

    use Data::Dumper;
    use Mail::Sender;
    use POSIX qw( strftime );
    use File::Temp qw (tempdir) ;
    use File::Copy;

    sub new ($) {
        my $class = shift;
        my %attr = @_;
        Carp::confess('Config: undefined pdf_email_subject') unless defined $attr{section}->{pdf_email_subject};
        Carp::confess('Config: undefined pdf_email_from') unless defined $attr{section}->{pdf_email_from};
        my $self = bless({}, $class);
        %$self = @_;

        return $self;
    }

    sub sendfiles {
        my $self = shift;
        return unless(keys %{$self->{filestoupload}});
        #DO SOME COMMON TASK
        ..
        my $mailrcpt = $self->{section}->{pdf_email_rcpt};
        my $sender = new Mail::Sender {smtp => 'localhost', from => $self->{section}->{pdf_email_from}};
        $sender->MailFile({ to => $mailrcpt, 
                            subject => $self->{section}->{pdf_email_subject}, 
                            msg => "Attached is A1 of today's WSJE. ",
                            ctype => 'application/pdf',
                            file => @files } );

        $self->{uploaded_count} = @files;
    }
在何处执行通用操作,何时以及如何调用各自的子类

我应该使用抽象吗


感谢您的帮助

查看MT::FileMgr的实现:


它应该会为您提供很多关于如何为类似的东西执行Perl OOP的想法。

我认为您需要更详细地解释您正在尝试执行的操作。您在OOP的哪些方面遇到了问题?您是否已经编写了任何代码?