#! perl -slw use strict; use Data::Dumper; sub new { return [ ( 0 ) x shift ] if @_ == 1; return [ map { new( @_ ) } 1 .. shift ]; } sub deref { return $_[ 0 ] = $_[ 1 ] if @_ == 2; return deref( shift()->[ shift ], @_ ); } my $aref = new( 3, 4, 5 ); deref $aref, 0, 0, 0, 'This is element [0,0,0]'; deref $aref, 2, 3, 4, 'This is element [2,3,4]'; print Dumper $aref; __END__ $VAR1 = [ [ [ 'This is element [0,0,0]', 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ] ], [ [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ] ], [ [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 'This is element [2,3,4]' ] ] ];