komplex expressions in statement modifiers

2 views
Skip to first unread message

Rainer Weikusat

unread,
Apr 2, 2021, 2:37:34 PMApr 2
to
The perl grep operator can be used to determine if some condition holds
for some elements of a list. In scalar context, it returns the number of
times the condition was true. This means it's semantically a bad fit for
finding a single element in a list because it always processes the
complete list. But it can be used as test expression for a statement
modifier ... so far, so bad.

Upon spending a time thinking through this, it dawned to be that eval {
} is syntactically an expression, hence

------
@a = qw(a b c d e);

while ($l = <STDIN>) {
chomp($l);
print("found $l\n") if eval { $_ eq $l and return 1 for @a };
}
-------

is valid Perl (which works, obviously).

George Bouras

unread,
Apr 2, 2021, 3:23:04 PMApr 2
to
use the clever equal ~~

Rainer Weikusat

unread,
Apr 2, 2021, 3:41:35 PMApr 2
to
I'm not interested in the smart alec operator :->, not the least because
it (presumably forever) prevents Perl from getting a non-experimental
multiway conditional construct (something I'm using frequently)

Otto J. Makela

unread,
Apr 6, 2021, 12:50:40 AMApr 6
to
Rainer Weikusat <rwei...@talktalk.net> wrote:

[...]
> is valid Perl (which works, obviously).

Thanks for this bit of strangeness, it caused me to look up the Perl
"secret operators" page:

https://metacpan.org/pod/distribution/perlsecret/lib/perlsecret.pod
--
/* * * Otto J. Makela <o...@iki.fi> * * * * * * * * * */
/* Phone: +358 40 765 5772, ICBM: N 60 10' E 24 55' */
/* Mail: Mechelininkatu 26 B 27, FI-00100 Helsinki */
/* * * Computers Rule 01001111 01001011 * * * * * * */

Rainer Weikusat

unread,
Apr 6, 2021, 10:37:20 AMApr 6
to
o...@iki.fi (Otto J. Makela) writes:
> Rainer Weikusat <rwei...@talktalk.net> wrote:
>
> [...]
>> is valid Perl (which works, obviously).
>
> Thanks for this bit of strangeness, it caused me to look up the Perl
> "secret operators" page:
>
> https://metacpan.org/pod/distribution/perlsecret/lib/perlsecret.pod

There's nothing particularly strange in this construct: Any operator
can (obviously) be used as test expression for a
conditional. And any operator with a &-prototype would do here:

---------
sub judge (&)
{
&{$_[0]}
}

@a = qw(a b c d e);

while ($l = <>) {
chomp($l);
print("found $l\n") if judge { $_ eq $l and return 1 for @a };
}
---------

eval is just one behaving in this way which is already available.

NB: The page is somewhat interesting. But I don't generally care for
"brevity" (for its own sake) or "obscurity" (at all).
Reply all
Reply to author
Forward
0 new messages