Gunnar Hjalmarsson wrote:
Ron Smith wrote:

my @basenames = &basenames(@paths);

sub basenames {
    foreach (@_) {
        if ($_ =~ /(\w+)\.\d+\.\w+$/) {
            @basenames = $1;             # print "@basenames\n";

That line assigns to @basenames the extracted basename from the last path only, i.e. the basenames extracted during previous iterations are not kept. You probably mean:


    push @basenames, $1;

        }
    }

Here the loop is finished, but nothing is returned from the subroutine.

return @basenames;

Actually, something IS returned, it is just not something that the OP expects or wants.


$ perl -e'
sub basenames {
    for ( @_ ) {
        if ( /(\d+)/ ) {
            @basenames = $1;
            }
        }
    }
my @basenames = basenames( @ARGV );
print @basenames . ":  >" . join( "<, >", @basenames ) . "<\n";
' 123 456 789
1:  ><



John
--
use Perl;
program
fulfillment

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