not trying to re-obfuscate what we were trying to make simpler, but this would move everything back into one statement, instead of trying for $found and then testing it:
for (LIST) { do{ something; last; } if ($_ eq $wanted) }
| [reply] [d/l] [select] |
just a point here,
i've been burned by this one many times, please don't try to use a loop control statement (ie next, last, redo) inside of a do block. it'll fail1. And from personal experience, whenever you try to think of doing something that involves a loop control statement inside a do block, stop yourself from implementing said code. Your best bet would be to rethink what you're doing, and failing that ask the monks here for help. It is possible (and likely) that it is the best code for some situations, but more oft than not it won't be what you're looking for after you've written it.
i'll also make the point, you could do a rewrite kinda like so:
for(LIST) { do{ something } and last if ($_ eq $wanted) }
which would work, but it's not very readable and there are definitely better solutions.
Hope This Helps,
jynx
1 For further support of this look up p112 in Camel3. | [reply] [d/l] [select] |
for( $test_value )
{
/pattern1/ and do { something; last; };
/pattern2/ and do { something else; last; };
do { default action; #no last required
};
}
| [reply] [d/l] [select] |
And if something is something like $something=0 it will FAIL!
| [reply] |