【发布时间】:2010-12-01 07:32:09
【问题描述】:
我需要检查用户主目录中的文件是否存在,所以使用文件检查:
if ( -e "~/foo.txt" ) {
print "yes, it exists!" ;
}
即使在用户的主目录下有一个名为 foo.txt 的文件,Perl 总是 抱怨没有这样的文件或目录。当我将“~”替换为 /home/jimmy(假设用户是 jimmy)时,Perl 会给出正确的判断。
您能否解释一下为什么“~”在 Perl 中不起作用并告诉我 Perl 的方法是什么? 找到用户的主目录?
【问题讨论】:
-
~ 是一个外壳。这就是为什么它在 Perl 中不起作用的原因。 :)
-
你也可以这样看:如果这个 were 应该工作,那么 Perl 必须用你的替换 every 字符串中的波浪号主目录。然后,您将始终必须在编写的每个字符串中转义波浪号。还要与 bash 进行比较:如果你想要波浪号扩展,那么你的字符串必须 not 用引号引起来,否则 bash 不会扩展它。所以实际上你可以说 Perl 在这里的工作方式与 Bash 完全一样:如果波浪号在引号中,那么它没有什么特别的。 ;)
标签: perl home-directory tilde-expansion