use strict; use warnings; my @array1 = qw( four five six ); my @array = qw( one two three ); push( @array, \@array1 ); my $string = "four"; my %hash = ( 'first' => 'one', 'second' => 'two', 'third' => 'three', 'fourth' => \@array, ); #print_r( @array ); print_r( \%hash ); sub print_r { package print_r; our $level; our @level_index; if ( ! defined $level ) { $level = 0 }; if ( ! defined @level_index ) { $level_index[$level] = 0 }; for ( @_ ) { my $element = $_; my $index = $level_index[$level]; print "\t" x $level . "[$index] => "; if ( ref($element) eq 'ARRAY' ) { my $array = $_; $level_index[++$level] = 0; print "(Array)\n"; for ( @$array ) { main::print_r( $_ ); } --$level if ( $level > 0 ); } elsif ( ref($element) eq 'HASH' ) { my $hash = $_; print "(Hash)\n"; ++$level; for ( keys %$hash ) { $level_index[$level] = $_; main::print_r( $$hash{$_} ); } } else { print "$element\n"; } $level_index[$level]++; } } # End print_r