sub flatten { # Depth-first traversal. my @scalar; foreach my $item (@_) { if (ref $item eq 'ARRAY') { push @scalar, flatten(@$item); } elsif (ref $item eq 'HASH') { push @scalar, $_, flatten($$item{$_}) for keys %$item; } elsif (ref $item) { push @scalar, ref $item; } else { push @scalar, $item; } } return @scalar; } print join ', ', flatten $VAR2; print "\n";