Tying Arrays
Tying an
array to a module runs along very similar lines, as shown in Table 9.2. There are two levels at which you can work
with a normal array. At one level, you can get and set the value of
the entire array and the last element’s index (using
$#array
). At another level, you can get or set
individual elements and create or destroy its elements using
splice
, push
,
pop
, and so on. As this book goes to print,
tie
handles reads and writes only to array
elements and does not allow the array itself to be modified in any
way. This situation is expected to be remedied in the not-too-distant
future.
Table 9-2. tie and Array Access
When you say: |
Perl translates it to: |
---|---|
tie @array, 'Foo',1,2 |
$obj = Foo-->TIEARRAY (1,2); |
$a = $array[5]; |
$obj-->FETCH(5); |
$array[5] = "aa" |
$obj-->STORE(5, "aa"); |
untie @array; |
$obj-->DESTROY(); |
One useful example of tied arrays is to emulate a bitset. If you set
the 200th element to 1, the module can set the 200th bit in a bit
array, using vec()
.
The next section shows an example of tied arrays to wrap a text file.
TIEARRAY Example: File as an Array
This example builds a facility called TieFile to make a text file appear as an array. If you want to examine the 20th line of foo.txt, for example, you write:
tie @lines, 'TieFile', 'foo.txt'; print $lines[20];
For simplicity, this module does not accept updates to any element.
When asked to fetch the nth line, the TieFile module shown in Example 9.2 reads the file until it reaches that line and ...
Get Advanced Perl Programming 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.