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

📄 writer.pm

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 PM
字号:
package TAP::Parser::YAMLish::Writer;use strict;use vars qw{$VERSION};$VERSION = '3.07';my $ESCAPE_CHAR = qr{ [ \x00-\x1f \" ] }x;my @UNPRINTABLE = qw(  z    x01  x02  x03  x04  x05  x06  a  x08  t    n    v    f    r    x0e  x0f  x10  x11  x12  x13  x14  x15  x16  x17  x18  x19  x1a  e    x1c  x1d  x1e  x1f);# Create an empty TAP::Parser::YAMLish::Writer objectsub new {    my $class = shift;    bless {}, $class;}sub write {    my $self = shift;    die "Need something to write"      unless @_;    my $obj = shift;    my $out = shift || \*STDOUT;    die "Need a reference to something I can write to"      unless ref $out;    $self->{writer} = $self->_make_writer($out);    $self->_write_obj( '---', $obj );    $self->_put('...');    delete $self->{writer};}sub _make_writer {    my $self = shift;    my $out  = shift;    my $ref = ref $out;    if ( 'CODE' eq $ref ) {        return $out;    }    elsif ( 'ARRAY' eq $ref ) {        return sub { push @$out, shift };    }    elsif ( 'SCALAR' eq $ref ) {        return sub { $$out .= shift() . "\n" };    }    elsif ( 'GLOB' eq $ref || 'IO::Handle' eq $ref ) {        return sub { print $out shift(), "\n" };    }    die "Can't write to $out";}sub _put {    my $self = shift;    $self->{writer}->( join '', @_ );}sub _enc_scalar {    my $self = shift;    my $val  = shift;    return '~' unless defined $val;    if ( $val =~ /$ESCAPE_CHAR/ ) {        $val =~ s/\\/\\\\/g;        $val =~ s/"/\\"/g;        $val =~ s/ ( [\x00-\x1f] ) / '\\' . $UNPRINTABLE[ ord($1) ] /gex;        return qq{"$val"};    }    if ( length($val) == 0 or $val =~ /\s/ ) {        $val =~ s/'/''/;        return "'$val'";    }    return $val;}sub _write_obj {    my $self   = shift;    my $prefix = shift;    my $obj    = shift;    my $indent = shift || 0;    if ( my $ref = ref $obj ) {        my $pad = '  ' x $indent;        if ( 'HASH' eq $ref ) {            if ( keys %$obj ) {                $self->_put($prefix);                for my $key ( sort keys %$obj ) {                    my $value = $obj->{$key};                    $self->_write_obj(                        $pad . $self->_enc_scalar($key) . ':',                        $value, $indent + 1                    );                }            }            else {                $self->_put( $prefix, ' {}' );            }        }        elsif ( 'ARRAY' eq $ref ) {            if (@$obj) {                $self->_put($prefix);                for my $value (@$obj) {                    $self->_write_obj(                        $pad . '-', $value,                        $indent + 1                    );                }            }            else {                $self->_put( $prefix, ' []' );            }        }        else {            die "Don't know how to enocde $ref";        }    }    else {        $self->_put( $prefix, ' ', $self->_enc_scalar($obj) );    }}1;__END__=pod=head1 NAMETAP::Parser::YAMLish::Writer - Write YAMLish data=head1 VERSIONVersion 3.07=head1 SYNOPSIS    use TAP::Parser::YAMLish::Writer;        my $data = {        one => 1,        two => 2,        three => [ 1, 2, 3 ],    };        my $yw = TAP::Parser::YAMLish::Writer->new;        # Write to an array...    $yw->write( $data, \@some_array );        # ...an open file handle...    $yw->write( $data, $some_file_handle );        # ...a string ...    $yw->write( $data, \$some_string );        # ...or a closure    $yw->write( $data, sub {        my $line = shift;        print "$line\n";    } );=head1 DESCRIPTIONEncodes a scalar, hash reference or array reference as YAMLish.=head1 METHODS=head2 Class Methods=head3 C<new> my $writer = TAP::Parser::YAMLish::Writer->new;The constructor C<new> creates and returns an emptyC<TAP::Parser::YAMLish::Writer> object.=head2 Instance Methods=head3 C<write> $writer->write($obj, $output );Encode a scalar, hash reference or array reference as YAML.    my $writer = sub {        my $line = shift;        print SOMEFILE "$line\n";    };        my $data = {        one => 1,        two => 2,        three => [ 1, 2, 3 ],    };        my $yw = TAP::Parser::YAMLish::Writer->new;    $yw->write( $data, $writer );The C< $output > argument may be:=over=item * a reference to a scalar to append YAML to=item * the handle of an open file=item * a reference to an array into which YAML will be pushed=item * a code reference=backIf you supply a code reference the subroutine will be called once foreach line of output with the line as its only argument. Passed lineswill have no trailing newline.=head1 AUTHORAndy Armstrong, <andy@hexten.net>=head1 SEE ALSOL<YAML::Tiny>, L<YAML>, L<YAML::Syck>, L<Config::Tiny>, L<CSS::Tiny>,L<http://use.perl.org/~Alias/journal/29427>=head1 COPYRIGHTCopyright 2007-2008 Andy Armstrong.This program is free software; you can redistributeit and/or modify it under the same terms as Perl itself.The full text of the license can be found in theLICENSE file included with this module.=cut

⌨️ 快捷键说明

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