#! perl -slw use strict; sub weightedSum { my( $r, $weight ) = ( @_, 1 ); my $sum = 0; for ( @$r ) { if( ref ) { $sum += weightedSum( $_, $weight + 1 ); } else { $sum += $_ * $weight; } } return $sum; } my $arrref = [ [1,1,1,1], [1,1, [2,2] ], [1, [2, [3,3] ] ] ]; print weightedSum( $arrref );