I'm no expert, but chomp won't give you what you think it will:
my @arr = ('a', "b\n", "c\n");
print join (",",chomp (@arr));

This will print:
2

while this:
my @arr = ('a', "b\n", "c\n");
chomp (@arr);
print join (",",@arr);

will print:
a,b,c

Map will run whatever is in the code block (between the {}'s) on every
value in the list passed to it (between the ()'s).  The last statement
in the code block is like a return value.  Map builds the results list
out of all of the return values.  With a foreach loop, it would be:
my @results = ();
foreach (<IN>) {
     my $line = $_;
     chomp $line;
     $line =~ s/\s+//g;
     push (@results, $line); #appends $line to the @results list
}

Hope this helps.

-David

On Fri, 10 Sep 2004 11:58:30 -0500, Errin Larsen <[EMAIL PROTECTED]> wrote:
> On Fri, 10 Sep 2004 12:44:51 -0400, David Greenberg
> <[EMAIL PROTECTED]> wrote:
> > >foreach( @ARGV ) {
> > >       open IN, $_ or die "Couldn't open $_: $!\n";
> > >       chomp( my @data = <IN> );
> > >       close IN;
> > >       foreach( @data ) { s/\s+//g; }
> > >       foreach( 0..$#data ) { $results[$_] .= $data[$_]; }
> > >}
> > This is a little shorter and saves on iterations:
> > for my $file (@ARGV) {
> >      open IN, $file or die "Couldn't open $file: $!\n";
> >      @results = map { my $line = $_; chomp $line; $line =~ s/\s+//g;
> > $line } (<IN>);
> >      close IN;
> > }
> >
> > -David
> >
> 
> Can you throw the 'chomp' in the assignment in that 'map' statement?
> Then, can you also throw in the substitution in the mix?  like this:
>   @results = map{ my $line = chomp(  s/\s+//g ); } ( <IN> );
> 
> And if so, why not this:
> 
>   @results = map{ chomp( s/\s+//g ) } ( <IN> );
> 
> As long as we're playing Perl-Golf!!
> 
> I truly don't understand what 'map' is doing.  Can you explain it to
> me?  I have tried to read perldoc -f map but it's a little weird and
> hard to follow!
> 
> --Errin
>

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to