in reply to Removing File Extensions

@files = ("one.zip","twotwo.doc","three3.ppt"); map {$_ =~ /(.*)\./; push (@onlyNames, $1); push (@onlyExt, $');} @fil +es;

Replies are listed 'Best First'.
Re: Re: Removing File Extensions
by Wassercrats (Initiate) on May 02, 2004 at 00:38 UTC
    The above fails if there's no extension too.

    This works:

    @files = ("one.zip","twotwo.doc","three3.ppt","testfour"); map {$_ =~ /([^.]*)\.?/; push (@onlyNames, $1); push (@onlyExt, $');} +@files;
      This works:

      @files = ("one.zip","twotwo.doc","three3.ppt","testfour"); map {$_ =~ /([^.]*)\.?/; push (@onlyNames, $1); push (@onlyExt, $');} +@files;

      No, it doesn't always work. It fails if the filename is part of a complete path.

      Consider the following input, which will cause a complete path instead of a filename to be pushed into your @onlyNames array:

      /usr/bin/perl /home/users/d/davido/text.txt C:\Perl\scripts\mytest.pl

      In each of those cases, you'll capture into @onlyNames the following:

      /usr/bin/perl /home/users/d/davido/text C:\Perl\scripts\mytest

      It gets even worse if one of the directory names in the path contains a dot (.)

      Consider what happens if the input looks like this:

      C:\Perl\scripts.old\mytest.pl

      In that case, @onlyNames will contain:

      C:\Perl\scripts

      And clearly that's not a filename.

      Update: Just thought of another situation that may reveal a bug: What if the filename has multiple extensions? In this case, it would be up to the OP to define what constitutes an extension, and what constitutes a filename. But by way of example, your solution would turn:

      bigfile.tar.gz

      ...into...

      bigfile

      The danger here is that while .gz represents the extension, .tar represents a second layer of 'extension'. But the name of the .gz file really is bigfile.tar, since we're dealing with multiple layers of processing on the said file.


      Dave

      A reply falls below the community's threshold of quality. You may see it by logging in.