Hello nysus,
Since you’re testing for equality only, the straightforward solution is to stringify both terms in the comparison, thereby guaranteeing that you always compare a string with a string:
#! perl use strict; use warnings; use Data::Dump; my $string_or_number = 123; my @strings_or_numbers = ('abc', 123, 'ab4', 456); my @filtered = grep { "$string_or_number" ne "$_" } @strings_or_numbe +rs; dd \@filtered;
Output:
1:37 >perl 1612_SoPW.pl ["abc", "ab4", 456] 1:37 >
Of course, this assumes that neither $string_or_number nor any of the elements of @strings_or_numbers are ever undef.
Update: As AnomalousMonk and Laurent_R have pointed out below, the stringwise equality operators eq and ne implicity stringify their operands, so grep { "$string_or_number" ne "$_" } can be simplified to grep { $string_or_number ne $_ }.
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
In reply to Re: Filtering array of strings and numbers
by Athanasius
in thread Filtering array of strings and numbers
by nysus
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |