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

前端之家收集整理的这篇文章主要介绍了如何在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!

猜你在找的Perl相关文章