Date: 2018nov6
Update: 2025oct24
Language: perl
Q. perl: dirname() and basename()
A. You can do:
#!/bin/perl
use File::Basename;
my $fullname = '/etc/vdpau_wrapper.cfg';
my $dirname = dirname($fullname);
my $basename = basename($fullname);
print "fullname=$fullname\n";
print "dirname=$dirname\n";
print "basename=$basename\n";
Output:
fullname=/etc/vdpau_wrapper.cfg
dirname=/etc
basename=vdpau_wrapper.cfg
But maybe you don't want to include that extra dependency.
So here are functions you add to your code:
sub dirname($) {
my($orig) = @_;
my($a) = $orig;
$a =~ s?(/|\\)$??; # Remove trailing slash (or backslash)
$a =~ s?(/|\\)[^(/|\\)]*$??; # Remove trailing slash (or backslash) and basename
if ($orig eq $a) {
return '.';
}
return $a;
}
sub basename($) {
my($a) = @_;
$a =~ s?(/|\\)$??; # Remove trailing slash (or backslash)
if ($a =~ m/([^\/\\]*)$/) { # Match trailing non slash (or backslash)
$a = $1;
}
return $a;
}