@ -264,8 +264,8 @@ sub array_to_map {
my $ map = { } ;
my @ keys = ( ) ;
my @ values = ( ) ;
if ( defined $ array_ptr and ref $ array_ptr eq 'ARRAY' ) {
if ( defined $ get_key_code and ref $ get_key_code eq 'CODE' ) {
if ( defined $ array_ptr and ref $ array_ptr eq 'ARRAY' and
defined $ get_key_code and ref $ get_key_code eq 'CODE' ) {
if ( not ( defined $ get_value_code and ref $ get_value_code eq 'CODE' ) ) {
$ get_value_code = sub { return shift ; } ;
}
@ -275,9 +275,12 @@ sub array_to_map {
}
foreach my $ item ( @$ array_ptr ) {
my $ key = & $ get_key_code ( $ item ) ;
if ( defined $ key ) {
next unless defined $ key ;
my $ value = & $ get_value_code ( $ item ) ;
if ( defined $ value ) {
next unless defined $ value ;
if ( not exists $ map - > { $ key } ) {
if ( $ mode eq 'group' ) {
$ map - > { $ key } = [ $ value ] ;
@ -293,10 +296,7 @@ sub array_to_map {
}
}
push ( @ values , $ value ) ;
}
}
}
}
}
return ( $ map , \ @ keys , \ @ values ) ;