in reply to When would you choose foreach instead of map?
i use map alot. particulary when morphing data where i expect every input item to produce an output item. alot of code starts like this.
@out = <>; print Dump(@out);
then successive map like stages...
#!/usr/bin/perl -l use YAML; # whitespace separated column number of hostnames (base 0) $col = shift @ARGV || 0; # hostname other junk -- 0 # other junk hostname junk -- 2 # ... @out = map { [ join('.', @{$_->[0]}), $_->[1], $_->[2] ] } map { [ [ reverse split /\./, $_->[0] ], $_->[1], $_->[2] ] } sort { $a->[0] cmp $b->[0] } map { [ join( '.', reverse @{$_->[0]} ), [ @{$_->[0]} ], $_->[1] ] + } map { [ [ split /\./, $_->[0] ], $_->[1] ] } map { chomp; @f = split; $f = splice @f, $col, 1; [ $f , [ @f ] ] +} <>; # for regular list print "-" x 50; for $x ( @out ) { print "$x->[0] -- @{$x->[2]}"; } # for permuted list print "-" x 50; for $x ( @out ) { for $y ( @{$x->[1]} ) { push @{ $d{$y} }, [ $x->[0], $x->[2] ]; } } for $k ( sort keys %d ) { print "$k:"; print "\t$_->[0] -- @{$_->[1]}" for @{ $d{$k} }; } __END__ order and/or permute hostname with info cat <<_END_ | perl foo.pl $column isc.org tra la la la la juniper.net tra la da la da paradise.gen.nz bra la da la da troublemaking.geek.nz bra la la la la hookup.net woot toot boot automagic.org bling blang blum _END_ -------------------------------------------------- hookup.net -- woot toot boot juniper.net -- tra la da la da troublemaking.geek.nz -- bra la la la la paradise.gen.nz -- bra la da la da automagic.org -- bling blang blum isc.org -- tra la la la la -------------------------------------------------- automagic: automagic.org -- bling blang blum geek: troublemaking.geek.nz -- bra la la la la gen: paradise.gen.nz -- bra la da la da hookup: hookup.net -- woot toot boot isc: isc.org -- tra la la la la juniper: juniper.net -- tra la da la da net: hookup.net -- woot toot boot juniper.net -- tra la da la da nz: troublemaking.geek.nz -- bra la la la la paradise.gen.nz -- bra la da la da org: automagic.org -- bling blang blum isc.org -- tra la la la la paradise: paradise.gen.nz -- bra la da la da troublemaking: troublemaking.geek.nz -- bra la la la la
i find that when i try to do things like this without map that it gets uglier quicker.
i just dig map. i'm looking forward to Perl6 because i think i can use ==> to reverse the maps
@out = <> ==> map { chomp; [ split ] } ==> sort { $somthing } ==> map { sprintf "blah: @$_" } ; print Dump(@out);
|
|---|