in reply to Re^4: Perl Drag Racing - sum/delta list
in thread Perl Drag Racing - sum/delta list
Actually, map doesn't know that. You can write something like @x = map { () } @y; and then the resulting list is empty. You can also do something like @x = map { ($_, func($_)) } @y; in which case it's twice as large as the input list. Or something like @x = map { split } @y; in which case it's entirely up in the air how many elements the result list will have. If you do @x = map /re(g)(ex)/, @y;, input strings that don't match the regex will leave no trace in the output list, while those that do produce two entries each. And if you add a /g to the regex, even the latter constant becomes random.
I have no idea of the perl guts, but my guess is that it's because in a for loop, the array modification is an explicit operation. It's an independent op which needs to deduce the address to a scalar inside the array, and so it does so for each iteration, over and over. The map on the other hand creates a list implicitly and knows to keep track of where to dump the next value(s).
Anyway, that's just an educated guess. If anyone who knows better can offer some enlightenment, I'll be glad to learn more.Makeshifts last the longest.
|
|---|