Tying Arrays
A class implementing a tied array must define at least
the methods TIEARRAY
, FETCH
, and
STORE
. There are many optional methods: the
ubiquitous DESTROY
method, of course, but also the
STORESIZE
and FETCHSIZE
methods
used to provide $#array
and
scalar(@array)
access. In addition,
CLEAR
is triggered when Perl needs to empty the
array, and EXTEND
when Perl would have pre-extended
allocation in a real array.
You may also define the POP
,
PUSH
, SHIFT
,
UNSHIFT
, SPLICE
,
DELETE
, and EXISTS
methods if
you want the corresponding Perl functions to work on the tied array.
The Tie::Array
class can serve as a base class to
implement the first five of those functions in terms of
FETCH
and STORE
.
(Tie::Array
's default implementation of
DELETE
and EXISTS
simply calls
croak
.) As long as you define
FETCH
and STORE
, it doesn't
matter what kind of data structure your object contains.
On the other hand, the Tie::StdArray
class
(defined in the standard Tie::Array
module)
provides a base class with default methods that assume the object
contains a regular array. Here's a simple array-tying class that makes
use of this. Because it uses Tie::StdArray
as its
base class, it only needs to define the methods that should be treated
in a nonstandard way.
#!/usr/bin/perl package ClockArray; use Tie::Array; our @ISA = 'Tie::StdArray'; sub FETCH { my($self,$place) = @_; $self->[ $place % 12 ]; } sub STORE { my($self,$place,$value) = @_; $self->[ $place % 12 ] = $value; } package main; tie my @array, ...
Get Programming Perl, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.