我需要检查在用户主目录中的文件是否存在,以便使用文件检查:
if ( -e "~/foo.txt" ) {
print "yes, it exists!" ;
}
即使有一个用户的主目录下名为foo.txt的文件,Perl的总是抱怨,有没有这样的文件或目录。 当我的/ home /吉米代替“〜”(假设用户是吉米)那么Perl给出正确的判决。
你能在Perl解释为什么“〜”这么想的工作,并告诉我什么是Perl的方式找到一个用户的主目录?
我需要检查在用户主目录中的文件是否存在,以便使用文件检查:
if ( -e "~/foo.txt" ) {
print "yes, it exists!" ;
}
即使有一个用户的主目录下名为foo.txt的文件,Perl的总是抱怨,有没有这样的文件或目录。 当我的/ home /吉米代替“〜”(假设用户是吉米)那么Perl给出正确的判决。
你能在Perl解释为什么“〜”这么想的工作,并告诉我什么是Perl的方式找到一个用户的主目录?
~
是bash
主义,而不是一个perl
主义,这就是为什么它不工作。 既然你似乎是一个UNIX类系统上,可能是最简单的解决方法是使用$HOME
环境变量,例如:
if ( -e $ENV{"HOME"} . "/foo.txt" ) {
print "yes ,it exists!" ;
}
是的,我知道用户可以改变他们的$HOME
环境变量,但然后我会假设他们知道自己在做什么。 如果不是,他们应该得到的一切,他们得到:-)
如果你想要做正确的方式,你可以看看文件:: 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,所以你需要自行安装。
一旦你知道的主目录,构建您需要的路径文件::规格 :
use File::HomeDir qw(home);
use File::Spec::Functions qw(catfile);
print "The path is ", catfile( home(), 'foo.txt' ), "\n";
您可以glob的波浪, glob('~/foo.txt')
应该工作。 或者你也可以使用文件::保存::首页模块,还应该采取其他系统的护理。
对于用户的主目录存放在/etc/passwd
。 要获得这些信息的最好方法是getpw*
功能 :
#!/usr/bin/perl
use strict;
use warnings;
print "uid:", (getpwuid 501)[7], "\n",
"name:", (getpwnam "cowens")[7], "\n";
为了解决您的具体问题,请尝试以下代码:
if ( -e (getpwuid $>)[7] . "/foo.txt" ) {
print "yes ,it exists!";
}
尝试File::Path::Expand
。