#!/usr/bin/perl -w use strict; sub eithername { my ($name, $dir) = @_; my %bit; @bit{qw(path base)} = $dir =~ /(.*)\/([^\/]*)$/; return $bit{$name}; } sub basename { unshift @_, 'base'; goto &eithername } sub pathname { unshift @_, 'path'; goto &eithername } print basename('/usr/local/bin/ssh'), "\n";