Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if an array has an element that is not integer?

Tags:

perl

Firstly, I have a hash: $hWriteHash{'Identifier'}{'number'} that contains = 1#2#12#A24#48

Then I split this by "#" and then put it in the @arr_of_tenors variable.

Here's the code:

use strict;
use warnings;

use Scalar::Util qw(looks_like_number);
use Data::Dumper;

$nums = $hWriteHash{'Identifier'}{'number'};
my @arr_of_tenors = split("#", $nums);
print("@arr_of_tenors\n");

The output is 1 2 12 A24 48

Now, my goal is if the array has an element that's not an integer which is A24, it will go to die function.

Here's what I've tried.

if(not looks_like_number(@arr_of_tenors)){
    die "ERROR: Array has an element that's not an integer.";
}else{
    print("All good");
}

Obviously, the only acceptable format should be integers only.

I've tried to use looks_like_number but it didn't work. It always goes to else statement. I know that there is another option which is grep + regex. But as much as possible, I don't want to use regular expressions on this one if there is a function that does the same job. Also, as much as possible, I don't want to iterate each element.

How does looks_like_number works? Am I missing something?

like image 697
x2ffer12 Avatar asked Oct 18 '25 08:10

x2ffer12


1 Answers

Here's yet another way:

use Types::Common qw( Int );

if ( Int->all( @arr_of_tenors ) ) {
  # all integers
}
else {
  # at least one non-integer
}

And another, because why not?

use Types::Common qw( ArrayRef Int );

if ( ArrayRef->of( Int )->check( \@arr_of_tenors ) ) {
  # all integers
}
else {
  # at least one non-integer
}
like image 159
tobyink Avatar answered Oct 21 '25 13:10

tobyink