http://www.perlmonks.org?node_id=638267


in reply to A pair of "mathematical" attributes for arrays?

I'm not suggesting that you actually use this, but the following is a simple implementation of the :zero (here :ZeroDefault) attribute. It's intended to show you that what you would like to have is quite easy to implement in pure Perl without changing the interpreter at all or writing a single line of XS/C. All the usual attribute-gotchas apply. All the usual tie() gotchas apply, too. (Slowness, for example.)

#!/usr/bin/perl use 5.006; use strict; use warnings; package Attribute::Array::Zeroes; use Tie::Array; use base 'Tie::StdArray'; use Attribute::Handlers autotie => { '__CALLER__::ZeroDefault' => 'Attribute::Array::Zeroes' }; sub FETCH { my $return = $_[0]->[$_[1]]; return 0 if not defined $return; $return; } package main; #use Attribute::Array::Zeroes; my @x : ZeroDefault; print "This is zero, not undef: $x[4]\n"; $x[5] = 1; print "This, too: $x[0] and even this: $x[6]. This isn't: $x[5]\n";

Of course, this is just a hack and I haven't tested it thoroughly.

Cheers,
Steffen