我正在运行Ubuntu。
每当我向Perl脚本传递一个以~
开头的路径(例如~/Documents/file.txt
)时,它就无法找到它。我必须通过规范路径(例如/home/dave/Documents/file.txt
)。
为什么?
我可以让Perl识别~
路径吗?
更新
所有建议的解决方案都包括更改脚本中的代码。我想要一个不会对脚本本身进行任何更改的解决方案(因为并非所有这些都是我的)。或许Bash的工作方式有哪些?
问题was posted at Super User的更新版本。
答案 0 :(得分:6)
您可以将路径传递给glob
以扩展它。
答案 1 :(得分:6)
要获得可靠(且简单)的跨平台方法,请尝试File::HomeDir:
use File::HomeDir;
print File::HomeDir->my_home;
答案 2 :(得分:5)
glob函数理解标准的Unix文件通配。
my $file = glob('~/Documents/file.txt');
答案 3 :(得分:3)
使用角度引号,而不是双引号:
open(my $fh, "< :crlf :encoding(cp1252)",
<~/Documents/file.txt>)
|| die "couldn't open Winblose text file ~/Documents/file.txt: $!";
<xxx>
迭代运算符,人们通常认为是readline
函数的语法糖,如果 xxx中存在shell metachars,则会调用glob
函数,和tilde算作其中之一。
您可能更喜欢<:encoding(Latin1)
的开放模式。它只取决于文件。
答案 4 :(得分:3)
从布鲁诺的评论中,你可以这样做:
$path =~ s/^~(\w*)/ ( getpwnam( $1 || $ENV{USER} ))[7] /e;
e
标志用执行或评估替换表达式的结果替换表达式。
答案 5 :(得分:1)
尝试将~
替换为$ENV{HOME}