On Wed, 13 Nov 2002 22:44:16 -0500, Matthew O. Persico wrote:
>On Thu, 14 Nov 2002 14:33:04 +1100, Ken Williams wrote:
>>
>>On Thursday, November 14, 2002, at 01:04  PM, Matthew O. Persico
>>wrote:
>>
>>>On Thu, 14 Nov 2002 11:49:56 +1100, Ken Williams wrote:
>>>>
>>>>Incidentally, I'd just write these as
>>>>
>>>>local $_ = $o->{lines}[0];
>>>
>>>As explained, you usually use $_ as assigned by Perl in for, map
>>>,grep. From these snippets, it seems like $_ is being assigned and
>>>used because:
>>>
>>>1) being too lazy (bad lazy) to use a 'my' 2) misguidedly think
>>>that
>>>not using 'my' saves a significant number of cycles 3) being too
>>>cute.
>>
>>Actually, in some of them it looks like it's so that $_ can be
>>used as the implicit target of a regular expression.  I do that
>>sometimes, particularly when writing something like a string
>>tokenizer, because it reduces clutter quite a bit:
>>
>>local $_ = shift();
>>if ( /^foo/gc ) {
>>....
>>} elsif ( /^bar/gc ) {
>>....
>>} elsif ( /^baz/gc ) {
>>....
>>} elsif ( /^quux/gc ) {
>>....
>>}
>
>TIMTOOTDI (and this is safer)...

Gee I can't type some times. I meant

        TIMTOWTDI

>SWITCH: for(shift) {
>/^foo/gc && do {
>    ...;
>    last SWITCH;
>};
>/^bar/gc && do {
>    ...;
>    last SWITCH;
>};
>/^baz/gc && do {
>    ...;
>    last SWITCH;
>};
>/^quux/gc && do {
>    ...;
>    last SWITCH;
>};
>    default:
>        ## If we are here, nothing matched.
>        ## Nothing special about the default: label
>        ## in Perl, just an old K&R jockey at heart...
>        ## And nothing special about the SWITCH label,
>        ## either. I could have called it YO_MAMA:, but that
>        ## is less self-documenting. :-)
>}
>
>In theory, as long as your tests are mutually exclusive, you do not
>need the "last SWITCH;" statements. However, since you are doing
>shift(),
>without the "last"s, you'll loop forever. Besides, it's safer to be
>explicit.
>
>--
>Matthew O. Persico
>


--
Matthew O. Persico


Reply via email to