package Scandle; sub TIEHANDLE { my ($buffer, $pos); bless [ $buffer, $pos],shift }; sub WRITE { my $self = shift; $self->PRINT($#_ ? substr($_[0],0,$_[1]) : $_[0] ); } sub PRINT { my $self = shift; my $write = shift; if ($self->[1] != length($self->[0]){ if (length($write) > length($self->[0])-$self->[1]){ substr($self->[0],$self->[1],length($_[0])-$self->[1],''); } else { substr($self->[0],$self->[1],length($write),$write); $self->[1] += length($write); return 1; } } $self->[0] .= $write; $self->[1] = length($self->[0]) }