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 -- jay -------------------------------------------------- This email and attachment(s): [ ] blogable; [ x ] ask first; [ ] private and confidential daggerquill [at] gmail [dot] com http://www.tuaw.com http://www.downloadsquad.com http://www.engatiki.org values of β will give rise to dom!
