#!/usr/bin/perl use warnings; use strict; use List::Util qw{ any }; sub flatten { my ($struct) = @_; if (ref [] eq ref $struct) { return map flatten($_), @$struct } elsif (ref \\"" eq ref $struct) { return $$struct } else { return \$struct } } use Test::More tests => 2; my $ar = [ [ 'HEAD_goes_here', 'BODY_here' ], [ 'FOOT', 'FOOT', 'FOOT', 'FOOT' ] ]; my @flat = @$ar; while ( any { ref [] eq ref $_ } @flat ) { @flat = map { ref [] eq ref $_ ? \(@$_) : \$_ } @flat; @flat = map { ref \\"" eq ref $_ ? $$_ : $_ } @flat; } is_deeply \@flat, [map \$_, qw[ HEAD_goes_here BODY_here FOOT FOOT FOOT FOOT ] ]; is_deeply [flatten($ar)], \@flat;