is_array in perl?

There is no predefined is_array subroutine in Perl. if you are in need of such a function use the below code.

 

sub is_array {
  my ($ref) = @_;
  # Firstly arrays need to be references, throw
  #  out non-references early.
  return 0 unless ref $ref;

  # Now try and eval a bit of code to treat the
  #  reference as an array.  If it complains
  #  in the 'Not an ARRAY reference' then we're
  #  sure it's not an array, otherwise it was.
    eval {
        my $a = @$ref;
    };
    if ($@=~/^Not an ARRAY reference/)
    {
        return 0;
    }
    elsif ($@)
    {
        die "Unexpected error in eval: $@\n";
    }
    else
    {
        return 1;
    }
}

Need of an example? It’s given below :

#!/usr/bin/perl -w
use warnings;
use XML::Simple;

my @file;
$file[0]= '
    
        
            1000
        
        
            12001
            25000
        
    ';
$file[1]= '
    
        
            1000s
        
        
            12001x
        
    ';
foreach my $temp(@file)
{
    my $test_data = XMLin($temp);
    if(is_array($test_data->{proc}->{cpt}))
    {
        foreach my $dx (@{$test_data->{proc}->{cpt}})
        {
            print $dx."\n";
        }
    }
    else
    {
        print $test_data->{proc}->{cpt}."\n";
    }
}