package LWP::Sink::identity; require LWP::Sink; require LWP::Sink::_Pipe; @ISA=qw(LWP::Sink::_Pipe LWP::Sink ); use strict; sub new { my($class, %cnf) = @_; my $self = $class->SUPER::new(); if (my $bufsize = delete $cnf{'bufsize'}) { $self->{'bufsize'} = $bufsize + 0; } # XXX could check %cnf for unprocessed stuff $self; } sub _send { my $self = shift; my $sink = $self->{'sink'}; if (ref($sink) eq "CODE") { &$sink($_[0]); } elsif ($sink) { $sink->put($_[0]); } } sub put { my $self = shift; my $buf; if (my $bufsize = $self->{'bufsize'}) { $buf = \$self->{'buf'}; return $self if length($$buf .= $_[0]) < $bufsize; delete $self->{'buf'}; } else { $buf = \$_[0]; } $self->_send($$buf); $self; } sub flush { my $self = shift; my $buf = \$self->{'buf'}; return 1 unless defined($$buf) && length($$buf); delete $self->{'buf'}; $self->_send($$buf); 1; } sub close { my $self = shift; $self->flush; my $sink = delete $self->{'sink'}; $sink->close if $sink && ref($sink) ne "CODE"; 1; } @LWP::Sink::identity::encode::ISA=qw(LWP::Sink::identity); @LWP::Sink::identity::decode::ISA=qw(LWP::Sink::identity); 1;