⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.pm

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 PM
📖 第 1 页 / 共 2 页
字号:
package IO::Compress::Base::Common;use strict ;use warnings;use bytes;use Carp;use Scalar::Util qw(blessed readonly);use File::GlobMapper;require Exporter;our ($VERSION, @ISA, @EXPORT, %EXPORT_TAGS, $HAS_ENCODE);@ISA = qw(Exporter);$VERSION = '2.008';@EXPORT = qw( isaFilehandle isaFilename whatIsInput whatIsOutput               isaFileGlobString cleanFileGlobString oneTarget              setBinModeInput setBinModeOutput              ckInOutParams               createSelfTiedObject              getEncoding              WANT_CODE              WANT_EXT              WANT_UNDEF              WANT_HASH              STATUS_OK              STATUS_ENDSTREAM              STATUS_EOF              STATUS_ERROR          );  %EXPORT_TAGS = ( Status => [qw( STATUS_OK                                 STATUS_ENDSTREAM                                 STATUS_EOF                                 STATUS_ERROR                           )]);                       use constant STATUS_OK        => 0;use constant STATUS_ENDSTREAM => 1;use constant STATUS_EOF       => 2;use constant STATUS_ERROR     => -1;          sub hasEncode(){    if (! defined $HAS_ENCODE) {        eval        {            require Encode;            Encode->import();        };        $HAS_ENCODE = $@ ? 0 : 1 ;    }    return $HAS_ENCODE;}sub getEncoding($$$){    my $obj = shift;    my $class = shift ;    my $want_encoding = shift ;    $obj->croakError("$class: Encode module needed to use -Encode")        if ! hasEncode();    my $encoding = Encode::find_encoding($want_encoding);    $obj->croakError("$class: Encoding '$want_encoding' is not available")       if ! $encoding;    return $encoding;}our ($needBinmode);$needBinmode = ($^O eq 'MSWin32' ||                     ($] >= 5.006 && eval ' ${^UNICODE} || ${^UTF8LOCALE} '))                    ? 1 : 1 ;sub setBinModeInput($){    my $handle = shift ;    binmode $handle         if  $needBinmode;}sub setBinModeOutput($){    my $handle = shift ;    binmode $handle         if  $needBinmode;}sub isaFilehandle($){    use utf8; # Pragma needed to keep Perl 5.6.0 happy    return (defined $_[0] and              (UNIVERSAL::isa($_[0],'GLOB') or               UNIVERSAL::isa($_[0],'IO::Handle') or              UNIVERSAL::isa(\$_[0],'GLOB'))           )}sub isaFilename($){    return (defined $_[0] and            ! ref $_[0]    and            UNIVERSAL::isa(\$_[0], 'SCALAR'));}sub isaFileGlobString{    return defined $_[0] && $_[0] =~ /^<.*>$/;}sub cleanFileGlobString{    my $string = shift ;    $string =~ s/^\s*<\s*(.*)\s*>\s*$/$1/;    return $string;}use constant WANT_CODE  => 1 ;use constant WANT_EXT   => 2 ;use constant WANT_UNDEF => 4 ;#use constant WANT_HASH  => 8 ;use constant WANT_HASH  => 0 ;sub whatIsInput($;$){    my $got = whatIs(@_);        if (defined $got && $got eq 'filename' && defined $_[0] && $_[0] eq '-')    {        #use IO::File;        $got = 'handle';        $_[0] = *STDIN;        #$_[0] = new IO::File("<-");    }    return $got;}sub whatIsOutput($;$){    my $got = whatIs(@_);        if (defined $got && $got eq 'filename' && defined $_[0] && $_[0] eq '-')    {        $got = 'handle';        $_[0] = *STDOUT;        #$_[0] = new IO::File(">-");    }        return $got;}sub whatIs ($;$){    return 'handle' if isaFilehandle($_[0]);    my $wantCode = defined $_[1] && $_[1] & WANT_CODE ;    my $extended = defined $_[1] && $_[1] & WANT_EXT ;    my $undef    = defined $_[1] && $_[1] & WANT_UNDEF ;    my $hash     = defined $_[1] && $_[1] & WANT_HASH ;    return 'undef'  if ! defined $_[0] && $undef ;    if (ref $_[0]) {        return ''       if blessed($_[0]); # is an object        #return ''       if UNIVERSAL::isa($_[0], 'UNIVERSAL'); # is an object        return 'buffer' if UNIVERSAL::isa($_[0], 'SCALAR');        return 'array'  if UNIVERSAL::isa($_[0], 'ARRAY')  && $extended ;        return 'hash'   if UNIVERSAL::isa($_[0], 'HASH')   && $hash ;        return 'code'   if UNIVERSAL::isa($_[0], 'CODE')   && $wantCode ;        return '';    }    return 'fileglob' if $extended && isaFileGlobString($_[0]);    return 'filename';}sub oneTarget{    return $_[0] =~ /^(code|handle|buffer|filename)$/;}sub Validator::new{    my $class = shift ;    my $Class = shift ;    my $error_ref = shift ;    my $reportClass = shift ;    my %data = (Class       => $Class,                 Error       => $error_ref,                reportClass => $reportClass,                ) ;    my $obj = bless \%data, $class ;    local $Carp::CarpLevel = 1;    my $inType    = $data{inType}    = whatIsInput($_[0], WANT_EXT|WANT_HASH);    my $outType   = $data{outType}   = whatIsOutput($_[1], WANT_EXT|WANT_HASH);    my $oneInput  = $data{oneInput}  = oneTarget($inType);    my $oneOutput = $data{oneOutput} = oneTarget($outType);    if (! $inType)    {        $obj->croakError("$reportClass: illegal input parameter") ;        #return undef ;    }    #    if ($inType eq 'hash')#    {#        $obj->{Hash} = 1 ;#        $obj->{oneInput} = 1 ;#        return $obj->validateHash($_[0]);#    }    if (! $outType)    {        $obj->croakError("$reportClass: illegal output parameter") ;        #return undef ;    }        if ($inType ne 'fileglob' && $outType eq 'fileglob')    {        $obj->croakError("Need input fileglob for outout fileglob");    }    #    if ($inType ne 'fileglob' && $outType eq 'hash' && $inType ne 'filename' )#    {#        $obj->croakError("input must ne filename or fileglob when output is a hash");#    }        if ($inType eq 'fileglob' && $outType eq 'fileglob')    {        $data{GlobMap} = 1 ;        $data{inType} = $data{outType} = 'filename';        my $mapper = new File::GlobMapper($_[0], $_[1]);        if ( ! $mapper )        {            return $obj->saveErrorString($File::GlobMapper::Error) ;        }        $data{Pairs} = $mapper->getFileMap();        return $obj;    }        $obj->croakError("$reportClass: input and output $inType are identical")        if $inType eq $outType && $_[0] eq $_[1] && $_[0] ne '-' ;    if ($inType eq 'fileglob') # && $outType ne 'fileglob'    {        my $glob = cleanFileGlobString($_[0]);        my @inputs = glob($glob);        if (@inputs == 0)        {            # TODO -- legal or die?            die "globmap matched zero file -- legal or die???" ;        }        elsif (@inputs == 1)        {            $obj->validateInputFilenames($inputs[0])                or return undef;            $_[0] = $inputs[0]  ;            $data{inType} = 'filename' ;            $data{oneInput} = 1;        }        else        {            $obj->validateInputFilenames(@inputs)                or return undef;            $_[0] = [ @inputs ] ;            $data{inType} = 'filenames' ;        }    }    elsif ($inType eq 'filename')    {        $obj->validateInputFilenames($_[0])            or return undef;    }    elsif ($inType eq 'array')    {        $data{inType} = 'filenames' ;        $obj->validateInputArray($_[0])            or return undef ;    }    return $obj->saveErrorString("$reportClass: output buffer is read-only")        if $outType eq 'buffer' && readonly(${ $_[1] });    if ($outType eq 'filename' )    {        $obj->croakError("$reportClass: output filename is undef or null string")            if ! defined $_[1] || $_[1] eq ''  ;        if (-e $_[1])        {            if (-d _ )            {                return $obj->saveErrorString("output file '$_[1]' is a directory");            }        }    }        return $obj ;}sub Validator::saveErrorString{    my $self   = shift ;    ${ $self->{Error} } = shift ;    return undef;    }sub Validator::croakError{    my $self   = shift ;    $self->saveErrorString($_[0]);    croak $_[0];}sub Validator::validateInputFilenames{    my $self = shift ;    foreach my $filename (@_)    {        $self->croakError("$self->{reportClass}: input filename is undef or null string")            if ! defined $filename || $filename eq ''  ;        next if $filename eq '-';        if (! -e $filename )        {            return $self->saveErrorString("input file '$filename' does not exist");        }        if (-d _ )        {            return $self->saveErrorString("input file '$filename' is a directory");        }        if (! -r _ )        {            return $self->saveErrorString("cannot open file '$filename': $!");        }    }    return 1 ;}sub Validator::validateInputArray{    my $self = shift ;    if ( @{ $_[0] } == 0 )    {        return $self->saveErrorString("empty array reference") ;    }        foreach my $element ( @{ $_[0] } )    {        my $inType  = whatIsInput($element);            if (! $inType)        {            $self->croakError("unknown input parameter") ;        }            elsif($inType eq 'filename')        {            $self->validateInputFilenames($element)                or return undef ;        }        else        {            $self->croakError("not a filename") ;        }    }    return 1 ;}#sub Validator::validateHash#{#    my $self = shift ;#    my $href = shift ;##    while (my($k, $v) = each %$href)#    {#        my $ktype = whatIsInput($k);#        my $vtype = whatIsOutput($v, WANT_EXT|WANT_UNDEF) ;##        if ($ktype ne 'filename')#        {#            return $self->saveErrorString("hash key not filename") ;#        }    ##        my %valid = map { $_ => 1 } qw(filename buffer array undef handle) ;#        if (! $valid{$vtype})#        {#            return $self->saveErrorString("hash value not ok") ;#        }    #    }##    return $self ;#}sub createSelfTiedObject{    my $class = shift || (caller)[0] ;    my $error_ref = shift ;    my $obj = bless Symbol::gensym(), ref($class) || $class;    tie *$obj, $obj if $] >= 5.005;    *$obj->{Closed} = 1 ;    $$error_ref = '';    *$obj->{Error} = $error_ref ;    my $errno = 0 ;    *$obj->{ErrorNo} = \$errno ;    return $obj;}#package Parse::Parameters ;###require Exporter;#our ($VERSION, @ISA, @EXPORT);#$VERSION = '2.000_08';#@ISA = qw(Exporter);$EXPORT_TAGS{Parse} = [qw( ParseParameters                            Parse_any Parse_unsigned Parse_signed                            Parse_boolean Parse_custom Parse_string                           Parse_multiple Parse_writable_scalar                         )

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -