in reply to ~username expansion

The following is an example of how I have done it in the past:

#!/usr/bin/perl -w use strict; use File::Glob qw(:glob); my $dirstring = q(~user); my $newdirstring = File::Glob::bsd_glob( $dirstring, GLOB_TILDE | GLOB_ERR ); print <<RESULTS; Old directory string: $dirstring New directory string: $newdirstring RESULTS

Hope that helps.

Replies are listed 'Best First'.
Re^2: ~username expansion
by Anonymous Monk on Nov 01, 2004 at 01:35 UTC
    Sadly, it appears I don't have File::Glob. It's a fairly old Perl installation, and I've noticed deficiencies fairly frequently.

    Thanks anyway for your input.

      I'm not familiar with File::Glob but perl does have a built in glob which I have used it in the past.

      Also I just looked at the docs for File::Glob and it looks like bsd_glob allows for flags which the built in glob does not. However the perldoc for glob notes this:
      Beginning with v5.6.0, this operator is implemented using the standard "File::Glob" extension. See File::Glob for details.
      In fact on my system (Perl v5.8.0, Slackware 9.1) glob matches the tilde in my username:
      [frink@truth]$perl -e 'print map $_ .= "\n" , glob("~frink/tmp/*");' + /home/frink/tmp/137-03.mp3 /home/frink/tmp/156-03.mp3 /home/frink/tmp/2004-01.pdf /home/frink/tmp/2004-01.xls /home/frink/tmp/audio [frink@truth]$
      grep username: /etc/passwd | cut -d: -f6 perl -le 'print glob "~username"';