| Next | Tricks of the Wizards | 68 |
package MirrorFile;
sub TIEARRAY {
my ($package, $filename) = @_;
open my $fh, "<", $filename or return;
my $self = { FH => $fh, FILE => $filename, CACHE => [] };
bless $self => $package;
}
sub FETCH {
my ($self, $lineno) = @_;
return $self->{CACHE}[$lineno]
if defined $self->{CACHE}[$lineno];
my $fh = $self->{FH};
while (<$fh>) {
push @{$self->{CACHE}}, $_;
return $_ if $#{$self->{CACHE}} == $lineno;
}
return;
}
sub FETCHSIZE {
my ($self) = @_;
my $fh = $self->{FH};
push @{$self->{CACHE}}, <$fh>;
scalar @{$self->{CACHE}};
}
Supporting STORE is quite difficult
See Tie::File for many details
| Next | ![]() |
Copyright © 2003 M. J. Dominus |