use Data::Dumper; sub mychomp { while (@_) { eval {chomp $_[0] }, shift, next unless ref ; (push @_, @{shift @_}), next if ref $_[0] eq 'ARRAY'; (push @_, values %{shift @_}), next if ref $_[0] eq 'HASH'; shift; } } my $foo = "scalar\n"; my @foo = ( [ "bar\n", "foo\n", "xyzzy\n", { blaat => "hee hee\n", hihi => "hoho\n" } ], {qw(a b c d e f)}, "w00t\n", \$foo, \ "read-only\n" ); mychomp(@foo); print Dumper(\@foo); __END__ $VAR1 = [ 'ARRAY(0x80f3764)', 'HASH(0x81495a8)', 'w00t', 'SCALAR(0x8131fe8)', 'SCALAR(0x813e78c)' ];