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.
| [reply] [Watch: Dir/Any] [d/l] |
(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
| [reply] [Watch: Dir/Any] |
$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.
| [reply] [Watch: Dir/Any] [d/l] [select] |
Jeezus! "little-used" would be the exaggeration of the day here!
| [reply] [Watch: Dir/Any] |