Reputation: 3183
In my perl script, I have the param $FILE=/etc/sysconfig/network
in which way (in perl) I can cut only the directory and put the directory in $DIR param
in order to get:
$DIR=/etc/sysconfig
(like dirname /etc/sysconfig/network in shell script)
Upvotes: 24
Views: 59445
Reputation: 25370
use File::Basename;
($name,$path,$suffix) = fileparse($fullname,@suffixlist);
$name = fileparse($fullname,@suffixlist);
$basename = basename($fullname,@suffixlist);
$dirname = dirname($fullname);
Read more about File::Basename in perldoc.
Upvotes: 32
Reputation: 164629
Watch out! dirname()
is deliberately dumb to emulate the dirname
shell command. It is not so much "give me the directory part of this file path" as "give me all but the last part of this path". Why is that important?
my $dir = "/foo/bar/"; # obviously a directory
print dirname($dir); # prints /foo
This is fine, just so long as you realize that dirname
does not return the dirname.
If you want the above to return /foo/bar/
you're better off using File::Spec.
use File::Spec;
my($vol,$dir,$file) = File::Spec->splitpath($path);
Upvotes: 42
Reputation: 61937
Use the File::Basename core module:
use strict;
use warnings;
use File::Basename;
my $FILE = '/etc/sysconfig/network';
my $DIR = dirname($FILE);
print $DIR, "\n";
This prints out:
/etc/sysconfig
Upvotes: 10