如何在Perl中找到用户的主目录?

我需要检查一个文件用户的主目录是否存在,所以使用文件检查:
if ( -e "~/foo.txt" ) {
   print "yes,it exists!" ;
}

即使在用户的主目录下有一个名为foo.txt的文件,Perl总是
抱怨没有这样的文件或目录。当我用/ home / jimmy替换“〜”(假设用户是jimmy),然后Perl给出正确的判断。

你能解释为什么“〜”dosen’t在Perl工作,告诉我什么是Perl的方式
找到用户的主目录?

解决方法

〜是一个bash-ism而不是perl-ism,这就是为什么它不工作。鉴于您似乎是在UNIX类型系统上,可能最简单的解决方案是使用$ HOME环境变量,例如:
if ( -e $ENV{"HOME"} . "/foo.txt" ) {
    print "yes,it exists!" ;
}

是的,我知道用户可以改变他们的$ HOME环境变量,但然后我会假设他们知道他们在做什么。如果不是,他们应得到他们得到的一切:-)

如果你想以正确的方式做,你可以看看File::HomeDir,这是一个更多的平台精明。您可以在以下脚本chkfile.pl中查看它的操作:

use File::HomeDir;
$fileSpec = File::HomeDir->my_home . "/foo.txt";
if ( -e $fileSpec ) {
    print "Yes,it exists!\n";
} else {
    print "No,it doesn't!\n";
}

和成绩单:

pax$ touch ~/foo.txt ; perl chkfile.pl
Yes,it exists!

pax$ rm -rf ~/foo.txt ; perl chkfile.pl
No,it doesn't!

相关文章

忍不住在 PerlChina 邮件列表中盘点了一下 Perl 里的 Web 应用框架(巧的是 PerlBuzz 最近也有一篇相关...
bless有两个参数:对象的引用、类的名称。 类的名称是一个字符串,代表了类的类型信息,这是理解bless的...
gb2312转Utf的方法: use Encode; my $str = "中文"; $str_cnsoftware = encode("utf-8...
  perl 计算硬盘利用率, 以%来查看硬盘资源是否存在IO消耗cpu资源情况; 部份代码参考了iostat源码;...
1 简单变量 Perl 的 Hello World 是怎么写的呢?请看下面的程序: #!/usr/bin/perl print "Hello W...
本文介绍Perl的Perl的简单语法,包括基本输入输出、分支循环控制结构、函数、常用系统调用和文件操作,...