17 Sep 2008

Perl File::Basename dlaczego używać?

Często pisząc skrypty w Perlu, wymagam od użytkownika podania pliku wejściowego do przetworzenia i nazwy pliku wyjściowego/katalogu w którym mają powstać wyniki.

Ta druga wartość bardzo często może zostać wygenerowana na podstawie informacji o nazwie pliku, który należy przetworzyć. Można to zrobić na wiele sposobów, oto niektóre z nich (od siebei dodam, że wszystkich 3 używałem, ale najlepszy wydaje mi się sposób 3).
Oto kod:
#!/usr/bin/perl

# Purpose: Why we should use libraries in Perl?

use strict;
use warnings;

use File::Basename;

my $inputFilePath = "/home/johny/projects/someSampleFile.txt";
my $outDirName ;

# --
print "# version without additional modules\n";
my $ipf1 = $inputFilePath;
$ipf1 =~ /(.*\/+?)?(.*)$/;
$ipf1 = $2;
$ipf1 =~ s/\.\w{0,3}$//g;
$outDirName = $ipf1;
print $outDirName."\n\n";
# --

# --
print "# version with File::Basename::basename\n";
my $ipf2 = File::Basename::basename($inputFilePath);
$ipf2 =~ s/\.[a-zA-Z]+$//g;
$outDirName = $ipf2;
print $outDirName."\n\n";
# --

# --
print "# version with File::Basename::fileparse (3 things done!)\n";
my ($bFName, $path, $ext)  =   File::Basename::fileparse($inputFilePath, qr/\.[^.]*/);
print $bFName."\n\n";

__END__

=head1 See also

http://search.cpan.org/~rgarcia/perl-5.10.0/lib/File/Basename.pm
Oraz wyniki jego działania:
johny@pilum:~/stuff$ perl basename.pl 
# version without additional modules
someSampleFile

# version with File::Basename::basename
someSampleFile

# version with File::Basename::fileparse (3 things done!)
someSampleFile

No comments:

Post a Comment