in reply to Re: Re: Removing File Extensions
in thread Removing File Extensions

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

Replies are listed 'Best First'.
A reply falls below the community's threshold of quality. You may see it by logging in.