SPUG: idioms of late

John W. Krahn jwkrahn at shaw.ca
Mon Jan 18 15:46:39 PST 2010

Joshua Juran wrote:
> On Jan 18, 2010, at 12:04 PM, Fred Morris wrote:
>> Lately I've found myself doing a lot of processing of lists... usually
>> either listrefs, or a list of keys which can be looked up in a hashref.
>> I've found myself using a few idioms in place of for/while loops
>> repeatedly, and I thought I'd share.
>> $foo->{names} = [ map { my $x = $_; $x =~ s/\.$//o; $x; }
>>                       @{$foo->{names}}
>>                 ];
>> That one munges a listref, stripping trailing dots off of all of the
>> elements. The initial "$x = $_;" seems to be necessary. That one seems
>> rather pythonic to me. Generally speaking they prefer that I use perl.
> First of all, let me note that your use of /o does nothing, since the 
> pattern doesn't contain any variables and therefore doesn't need to be 
> recompiled in the first place.  You have to use a copy of $_ because $_ 
> is read-only in map.

Incorrect.  You can modify $_ but that will just modify the contents of 
the original array because, as in a foreach loop, $_ is an alias to the 
current element of the original array.

The programmer is fighting against the two most
destructive forces in the universe: entropy and
human stupidity.               -- Damian Conway

More information about the spug-list mailing list