#!perl use strict; use warnings; {#bare block because package BLOCK appeared only 5.14 package Arraytrigger; use Tie::Array; use vars qw(@ISA); @ISA = ('Tie::StdArray'); sub STORE { &main::trigger; my $self = shift; $self->SUPER::STORE($self, @_); } sub CLEAR { &main::trigger; my $self = shift; $self->SUPER::CLEAR ($self, @_); } sub PUSH { &main::trigger; my $self = shift; $self->SUPER::PUSH($self, @_); } sub POP { &main::trigger; my $self = shift; $self->SUPER::POP($self, @_); } sub SHIFT { &main::trigger; my $self = shift; $self->SUPER::SHIFT($self, @_); } sub UNSHIFT { &main::trigger; my $self = shift; $self->SUPER::UNSHIFT($self, @_); } } #package main.. sub trigger{print "Triggered [@_]\n"} tie my @arr, 'Arraytrigger'; print "\tSetting list:\n" and @arr = qw(a b c d e); print "\tSetting one:\n" and $arr[0]=0; print "\tpushing:\n" and push @arr,'f'; print "\tpopping:\n" and pop @arr; print "\tshifting:\n" and shift @arr; print "\tunshifting:\n" and unshift @arr, 'zero'; print "\tclearing:\n" and @arr=();#undef @arr and @arr=undef seem no good.. #### #!perl use strict; use warnings; sub trigger{print "Triggered [@_]\n"} #must go BEFORE the eval is seen {#bare block because package BLOCK appeared only 5.14 package Arraytrigger; use Tie::Array; use vars qw(@ISA); @ISA = ('Tie::StdArray'); map { eval "sub $_ { &main::trigger; my \$self = shift; \$self->SUPER::$_(\$self, \@_); } " } qw(STORE CLEAR PUSH POP SHIFT UNSHIFT); } #package main.. tie my @arr, 'Arraytrigger'; print "\tSetting list:\n" and @arr = qw(a b c d e); print "\tSetting one:\n" and $arr[0]=0; print "\tpushing:\n" and push @arr,'f'; print "\tpopping:\n" and pop @arr; print "\tshifting:\n" and shift @arr; print "\tunshifting:\n" and unshift @arr, 'zero'; print "\tclearing:\n" and @arr=();#undef @arr and @arr=undef seem no good..