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.