# Call as: flatten([...]) sub flatten { my $aref=shift; die "not an array ref" unless ref($aref) eq 'ARRAY'; @result=(); foreach my $element (@$aref) { push @result, (ref($element) eq 'ARRAY' ? flatten($element) : $element); } @result; }