On Tue, Jan 25, 2011 at 1:08 PM, Ed Avis <eda@waniasset.com> wrote:
>
> 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.
It's not missing at all.
Any Any string equality $a eq $b
Are you suggesting we should replace the above with a long list that
includes the following?
Hash String string equality $a eq $b
Array String string equality $a eq $b
Regex String string equality $a eq $b
Explaining that "Any" includes "String" sounds like the job of a *book* to
me.
> 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
Not surprising without warnings suppressed:
$ perl -wE'@a = (1); say "1 x" ~~ @a'
Argument "1 x" isn't numeric in smart match at -e line 1.
1
> But is there any way to get a plain string match, at least for
> scalars which are not references?
Make sure the array only contains strings.
"1 x" ~~ [ map "$_", @a ]
In general, smart-matching only makes sense with known values on the
right-hand side. It might make more sense to use grep or similar when that's
not the case.
grep "1 x" eq $_, @a
any { "1 x" eq $_ } @a
- Eric
Thread Previous
|
Thread Next