### local $_ = $value; my $foo = (/aaa/) ? 'wanna' : (/bbb/) ? 'be' : (/ccc/) ? 'startin' : 'somethin'; ###
Perl is a fantastic tool. The above is just one way to approach this problem.Point 1: "local" is a "rare duck" - it happens seldom. Almost always "my" is better. local is an artifact of previous Perl versions, but it still has uses. Point 2: I figure that setting $_ as an lvalue is a bad idea. That is motivated the fact that Perl can and will do this by itself. Point 3: I have no problem with ternary expressions. But I I do have a problem with an ":" without a "blah;" Point 4: If we have a complex decision with 4 values, probably we can come up with a name for that decision and I'd name a sub{} with that name. Point 5: If the thing we are searching is small and performance is not an issue, I would omit "last" and "next" in the interest of simplicity. So, this is one way to do this.. my $foo = decide($value); sub decide { my $value = shift; my $decision = 'somethin'; foreach ($value) #sets $_ to $value! { $decision = 'wanna' if (/aaa/); $decision = 'be' if (/bbb/); $decision = 'startin' if (/ccc/); } return ($decision ); }
Update:In many languages, the return value of decide() would be true/false. Perl can return a string from a sub and this enhances the readability.
if $foo eq 'be'{...do xxxx...}
In reply to Re: Would you use a switch instead?
by Marshall
in thread Would you use a switch instead?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |