#! perl -slw use strict; use Data::Dump qw[ pp ]; sub genNested { my $n = shift; map{ rand() < 0.5 ? [ rand(1000), genNested( $n-1 ) ] : rand( 1000 ) } 1 .. $n; } sub cbIterator (&$) { my( $code, $tree ) = @_; for my $i ( 0 .. $#$tree ) { if( ref( $tree->[ $i ] ) eq 'ARRAY' ) { &cbIterator( $code, $tree->[ $i ] ); } else { local $_ = $tree->[ $i ]; $code->(); } } } my @nested = genNested( 3 ); pp \@nested; cbIterator{ print; } \@nested; __END__ C:\test\nhash>nestedIterator.pl [ [ "711.822509765625", "334.869384765625", ["942.19970703125", ["600.4638671875"]], ], "978.3935546875", "965.240478515625", ] 711.822509765625 334.869384765625 942.19970703125 600.4638671875 978.3935546875 965.240478515625