On Wed, Oct 11, 2006 at 07:37:36PM -0400, Moon, John wrote:
> On 10/11/06, Moon, John <[EMAIL PROTECTED]> wrote:
> > perl -e '@a=("frc.apmt","frc_ff.apmt");print join(q{,}, map(&subt($_),
> > @a)), "\n";
> >         sub subt {my ($a) = @_; $a=~s/^(.*)\..*/$1/; print "a=$a\n";
> > return $a;}'
> > perl -e '@a=("frc.apmt","frc_ff.apmt");print join(q{,},
> > map(s/^(.*)\..*/$1/, @a)), "\n"; '
> > perl -e '@a=("frc.apmt","frc_ff.apmt");print join(q{,},
> > map(s/^(.*)\..*/\1/, @a)), "\n"; '
> >
> > Can someone explain why the last two examples don't product the same
> > output as the first?
> >
> > Thank you in advance.
> > jwm
> 
> >>Sure. It's the first par of the sub:
> >>
> >>    my $a = @_;
> >>
> >>In scalar context, an array returns the number of elements, so your $a
> >>gets 1. Even though you only pass your sub 1 item, @_ is still an
> >>array. It's a 1-element array, but it's an array. What you want is:
> >>
> >>    my $a = shift @_;
> >>
> >>Also, for future reference using $a and $b is dangerous and considered
> >>bad form; Perl uses them internally to implement sort.
> >>
> >>HTH
> 
> Thank you for looking but first part of sub is:
> my ($a) = @_;
> 
> and the first test script is returning what I want ... it's the second &
> third I'm asking about

Take a look at the return value of s/// in perldoc perlop.

-- 
Paul Johnson - [EMAIL PROTECTED]
http://www.pjcj.net

-- 
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