Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Re: Simple Q. for You

by trippledubs (Deacon)
on Mar 16, 2018 at 01:55 UTC ( #1211007=note: print w/replies, xml ) Need Help??

in reply to Simple Q. for You

There's a lot going on. It kind of does what it reads like it should do in English, return 1 if (this and that). If either this or that is not true, keep going and do not return 1. That's pretty much what you need to know to use it effectively and correctly. The first condition is probably there just to avoid a nasty warning you'll get if foo is undefined.

But hey, let's complicate things. You have a postfix conditional followed by a boolean context evaluation with two conditions. If the first condition is true, evaluate the second. If they both evaluate to true, the whole evaluation is true and then you can return 1.

The first condition checks if  $d->{foo} is true or false. You're dereferencing foo out of scalar variable $d first, if that is either the number 0, 'the strings 0 or "", the empty list, or undef, it's false.

If the first condition is false, the && returns false for the evaluation and does not evaluate the second condition.

The second condition is a regular expression match to decide if $d->{foo} contains the letter x in either uppercase or lowercase.

Replies are listed 'Best First'.
Re^2: Simple Q. for You
by syphilis (Bishop) on Mar 16, 2018 at 02:37 UTC
    As a further supplement to trippledubs post, here's a small script you can play around with:
    use strict; use warnings; my %h = (foo => 'oxen'); my $d = \%h; print test_it(), "\n"; sub test_it { return 1 if ( $d->{foo} && $d->{foo} =~ /X/i ); return 0; }
    As trippledubs touched on, if the second condition is met then the fist condition will also inevitably be met. Hence, the script will function perfectly well if the first condition is omitted - except that it would then also print a warning if $h{foo} is not defined.


Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1211007]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (5)
As of 2021-01-23 21:49 GMT
Find Nodes?
    Voting Booth?