http://www.perlmonks.org?node_id=21106


in reply to Map: The Basics

splinky has got me doing it now... To pick a nit:

Map works on all types of lists, not just those returned by the <> operators. In addition, $_ is a symbolic reference (see perlref), which gives map yet another use, and makes one of your examples a bit confusing. Consider:

my @array = <FILE>; my @newarray = map { s/\#.*$//; $_ } @array;
Now @newarray and @array contain the same thing, as the s/// operator alters the contents of @array! Far better to write:
my @array = <FILE>; map s/\#.*$//, @array;
This way of doing things is deliberate, as it eliminates unnecessary assignments when you want the results to go back to the same array. The <FILE> thing is special, as perl copies the file to a temporary, anonymous, array for use while processing, so you never see that it gets altered.

Andrew.