brian_d_foy has asked for the wisdom of the Perl Monks concerning the following question:

Want to be a Perl contributor? It's easy. Just fix this FAQ answer. Update: An by update, I mean rewrite it, not tell me how to rewrite it. :)

perlfaq5 has an answer for "How can I translate tildes (~) in a filename?". Looking at the code in the answer, I know it must break in a lot of places since it relies either on getpwnam or environment variables. Who can come up with a good answer that is more robust? I'm especially interested in any module-fu that can be added. You don't have to necessarily keep any of the existing answer. If you replace the answer, you get your name listed right next to it. :)

You can post your answer here or to the mailing list in perlfaq.

Here's the source (although you can get at the svn repository too by looking at the instructions in perlfaq:

=head2 How can I translate tildes (~) in a filename? X<tilde> X<tilde expansion> Use the E<lt>E<gt> (C<glob()>) operator, documented in L<perlfunc>. Versions of Perl older than 5.6 require that you have a shell installed that groks tildes. Later versions of Perl have this feature built in. The C<File::KGlob> module (available from CPAN) gives more portable glob functionality. Within Perl, you may use this directly: $filename =~ s{ ^ ~ # find a leading tilde ( # save this in $1 [^/] # a non-slash character * # repeated 0 or more times (0 means me) ) }{ $1 ? (getpwnam($1))[7] : ( $ENV{HOME} || $ENV{LOGDIR} ) }ex;
brian d foy <>
Subscribe to The Perl Review