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


In reply to Re: Re: Re: Removing File Extensions by davido
in thread Removing File Extensions by BalochDude

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.