sub flatten { my @result; while (@_) { my $first = shift; if (UNIVERSAL::isa($first, "ARRAY")) { # fixed, thanks particle unshift @_, @$first; } else { push @result, $first; } } @result; }