http://www.perlmonks.org?node_id=691368


in reply to Improve perlfaq5: How can I translate tildes (~) in a filename?

Something like this would probably do it (I haven't actually tested it)
require File::HomeDir; $filename =~ s/^~(\w+)/File::HomeDir->users_home("$1")/e; $filename =~ s/^~/File::HomeDir->my_home/e;
  • Comment on Re: Improve perlfaq5: How can I translate tildes (~) in a filename?
  • Download Code

Replies are listed 'Best First'.
Re^2: Improve perlfaq5: How can I translate tildes (~) in a filename?
by andreas1234567 (Vicar) on Jun 11, 2008 at 05:27 UTC
    Works fine for me:
    $ cat 691281.pl use strict; use warnings; use File::HomeDir; use Test::More; plan tests => 4; sub rep_tilde { my $filename = shift; $filename =~ s/^~(\w+)/File::HomeDir->users_home("$1")/e; $filename =~ s/^~/File::HomeDir->my_home/e; return $filename; } is(rep_tilde("~"), "/home/foo", "expect ~ -> /home/foo"); is(rep_tilde("~/"), "/home/foo/", "expect ~/ -> /home/foo/"); is(rep_tilde("~/.feeds"), "/home/foo/.feeds", "expect ~/.feeds -> /home/foo/.feeds"); is( rep_tilde("~/test/perl/perlmonks/691281/691281.pl"), "/home/foo/test/perl/perlmonks/691281/691281.pl", "expect ~/test/perl/perlmonks/691281/691281.pl " . "-> /home/foo/test/perl/perlmonks/691281/691281.pl" ); __END__ $ prove 691281.pl 691281....ok All tests successful. Files=1, Tests=4, 0 wallclock secs ( 0.05 cusr + 0.00 csys = 0.05 C +PU)
    --
    No matter how great and destructive your problems may seem now, remember, you've probably only seen the tip of them. [1]