Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re^2: Foreach Loops

by hubb0r (Pilgrim)
on Mar 15, 2005 at 22:22 UTC ( #439795=note: print w/replies, xml ) Need Help??

in reply to Re: Foreach Loops
in thread Foreach Loops

Can you explain what the
my $index = (1=~//..1=~/0/)-1;

Replies are listed 'Best First'.
Re^3: Foreach Loops
by Roy Johnson (Monsignor) on Mar 15, 2005 at 22:41 UTC
    I'm so glad you asked!

    I am using a flip-flop as a counter. Of the conditions I gave it, the left side is always true and the right is always false, so the expression is always true. It is a property of the operator that it returns a count of the number of consecutive times it has been true. So subtracting one from that gives you the index.

    Unless there are redos or nexts, which would throw it off. So I really should have written

    my $index = 0; for my $line (@arr) { next if $index % 4 == 0; print "$index = $line\n"; } continue { $index = (1=~//..1=~/0/); }
    Well, actually, I shouldn't have written it at all as a solution to this question. But I like putting little-used operators into the spotlight so that people might think of them when they actually are appropriate.

    Caution: Contents may have been coded under pressure.
      (DROPS JAW)

      Pardon me, Roy, if I thank you; that is absolutely brilliant. (Include Guinness ad here.) I've never seen that before, and I wouldn't have thought of it in a month of Sundays. I have no idea where I would use that in place of normal indexing, but I might have to go out of my way to use this just to keep my coworkers from thinking that Perl is simple. Nothing like some obscurata for enhancing job security.

      tbone1, YAPS (Yet Another Perl Schlub)
      And remember, if he succeeds, so what.
      - Chick McGee

        I'm glad you got a kick out it, but I really have to discourage you from using it for indexing. Can you imagine explaining it?
        "What the hell is this mess?"
        "Oh, I'm tracking the index of the element of the array."
        "That's how you get an array index in Perl?! That's ridiculous. We're switching everything to Visual Basic®!"
        The most common use of a flip-flop is to extract a range of lines from a file. You set the left side to match the start of the range, and the right side to match the end of the range. If either operand is a constant expression, it is implicitly compared to $. (the line number). That is what kept me from using a simple expression like (1==1)..(1==0). Actually, now that I think about it, the expressions I used ought to be constant expressions.

        Anyway, I did think of a couple interesting alternatives for always-true flip-flops.

        $index = (!$index)...(!$index); #or $index = ($.||1)..($.&&0);
        Note that in the former, I have to use the 3-dot version, so that both operands aren't evaluated on the same pass. $index starts out zero, so the left side is true. After that, it's non-zero, so the right side is false.

        The second example just incorporates a variable into an expression whose truth is constant. I used $. because of its association with the operator, but any variable would do.

        Caution: Contents may have been coded under pressure.
      Jeezus! "little-used" would be the exaggeration of the day here!

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://439795]
vrk adds gingerbread cookies to the platter on the sideboard.
[erix]: I'll give that a try next time
vrk takes a cookie from the platter on the sideboard.
[Eily]: French sneeze "Atchoum", because we close our mouth when we're done :P
[erix]: Hatshepsut (no sneezing audio there)
choroba wipes the saliva from the cookies
[LanX]: scary Le Pen + Melonchon had over 40% ...
[vrk]: One good word for it in Finnish is pärskäys. A very wet connotation.
[Eily]: somehow when googling pärskäys I got a pageful of Finnish :P
[robby_dobby]: Can I go participate in an YAPC?

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (10)
As of 2017-04-24 15:50 GMT
Find Nodes?
    Voting Booth?
    I'm a fool:

    Results (442 votes). Check out past polls.