我需要检查一个文件在用户的主目录是否存在,所以使用文件检查:
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!