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 siebie 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