use File::Spec; my $filename = '~/public_html/'; if ( $filename =~ s<^~([^/]*)/> ) { my $homedir = $1 ? (getpwnam($1))[7] # specified user : $ENV{'HOME'} || (getpwuid($<))[7] # ourselves or die "Where's your home?\n"; $filename = File::Spec->catfile($homedir, $filename); }