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