use Data::Dumper;
my @array = (['a','b','c'],['d','e','f'],['g','h','i']);
my @index = map { $_ -> [0] } @array;
my @result = grep { $index[$_] =~ /g/ } 0..$#index;
my @result2 = grep { $array[$_][0] =~ /g/ } 0..$#array;
my @result3 = grep { $array[$_]->[0] =~ /g/ } 0..$#array;
print Data::Dumper->Dump([\@array, \@result, \@result2, \@result3], [qw(array result result2 result3)]);
print "A:",ref(\@array),",ELEMENTS=",@array,"\n";
print "B:",ref($array[0]),",FIRST_ELEMENT=",$array[0],",DEREF_FIRST_ELEMENT=",join(",",@{$array[0]}),"\n";
print "C:",ref(\$array[0][0]),",FIRST_ELEMENT=",$array[0][0],"\n";
print "D:",ref(\$array[0]->[0]),",FIRST_ELEMENT=",$array[0]->[0],"\n";
print "="x50,"\n";
my $arrayref = [['a','b','c'],['d','e','f'],['g','h','i']];
print "E:",ref($arrayref),",ELEMENTS=",$arrayref,"\n";
print "F:",ref(\$arrayref[0]),",FIRST_ELEMENT=",$arrayref->[0],",DEREF_FIRST_ELEMENT=",join(",",@{$arrayref->[0]}),"\n";
print "G:",ref($arrayref->[0]),",FIRST_ELEMENT=",$arrayref->[0],",DEREF_FIRST_ELEMENT=",join(",",@{$arrayref->[0]}),"\n";
print "H:",ref($arrayref->[0]),",FIRST_ELEMENT=",$arrayref->[0][0],",2ND_ELEMENT=",$arrayref->[0]->[1],"\n";