Programming Tips - perl: dirname() and basename()

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; }