This works:No, it doesn't always work. It fails if the filename is part of a complete path.
@files = ("one.zip","twotwo.doc","three3.ppt","testfour"); map {$_ =~ /([^.]*)\.?/; push (@onlyNames, $1); push (@onlyExt, $');} +@files;
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
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |