File-Marker
view release on metacpan or search on metacpan
lib/File/Marker.pm view on Meta::CPAN
use warnings;
package File::Marker;
# ABSTRACT: Set and jump between named position markers on a filehandle
our $VERSION = '0.14'; # VERSION
our @ISA = qw( IO::File );
use Carp;
use IO::File;
use Scalar::Util 1.09 qw( refaddr weaken );
#--------------------------------------------------------------------------#
# Inside-out data storage
#--------------------------------------------------------------------------#
my %MARKS = ();
# Track objects for thread-safety
my %REGISTRY = ();
#--------------------------------------------------------------------------#
# new()
#--------------------------------------------------------------------------#
sub new {
my $class = shift;
my $self = IO::File->new();
bless $self, $class;
weaken( $REGISTRY{ refaddr $self } = $self );
$self->open(@_) if @_;
return $self;
}
#--------------------------------------------------------------------------#
# open()
#--------------------------------------------------------------------------#
sub open {
my $self = shift;
lib/File/Marker.pm view on Meta::CPAN
# look under old_id to find the new, cloned reference
my $object = $REGISTRY{$old_id};
my $new_id = refaddr $object;
# relocate data
$MARKS{$new_id} = $MARKS{$old_id};
delete $MARKS{$old_id};
# update the weak reference to the new, cloned object
weaken( $REGISTRY{$new_id} = $object );
delete $REGISTRY{$old_id};
}
return;
}
#--------------------------------------------------------------------------#
# _object_count() -- used in test scripts to see if memory is leaking
#--------------------------------------------------------------------------#
( run in 0.900 second using v1.01-cache-2.11-cpan-a9ef4e587e4 )