my @flattened_array = flatten($nested_array_ref); sub flatten { my $array = shift; my @results = (); foreach my $element ( @$array ) { if( ref $element eq 'ARRAY' ) { push @results, flatten($element); } elsif( $element ) { push @results, $element; } } return @results; }
update: I investigated per rob_au's concerns with the following code using the above subroutine:
use Data::Dumper; use strict; my $nested_array_ref = [ '', [ 'a', [ 'b', 'c' ], '', 'd' ], 'value' ]; my @flattened_array = flatten($nested_array_ref); print Dumper(\@flattened_array);
and my output was this:
$VAR1 = [ 'a', 'b', 'c', 'd', 'value' ];
the example i gave explicitly passed an array_ref into the function to begin with, and @results is local to the subroutine, and does not get blown away during recursion.
In reply to Re: How to flatten an x-dimensional array?
by AidanLee
in thread How to flatten an x-dimensional array?
by Incognito
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |