This question is about the smart match operator ~~ and about its documentation.
Is it possible to find whether an array contains a given string?
In perl 5.10.0 I was using
@a ~~ $x
but from a glance at perlsyn(1) it appears that this does something different in
5.10.1 and later. I am not posting to complain about that change - it was well
signposted that smart matching in 5.10.0 was an experimental feature - but I
suggest an explicit entry in the 'Smart matching in detail' section to document
the case when $a is an array and $b is a string, which is currently missing.
From the new perlsyn it looks like 'match against an array element' might be
what I want to use, as
$x ~~ @a
but this has some surprising behaviour:
% perl -E '@a = (1); say "1 x" ~~ @a'
1
That is a consequence of this:
% perl -E 'say "1 x" ~~ 1'
1
which is documented in the 'Any / Num' case in perlsyn (and gives a warning
with -w). But is there any way to get a plain string match, at least for
scalars which are not references?
If not, I could instead use
List::MoreUtils::any { $_ eq $x } @a
--
Ed Avis <eda@waniasset.com>
Thread Next