-2
如何檢查路徑/目錄是否存在(-d)並且是根目錄中的完整路徑名?檢查一個目錄是否存在絕對路徑
i.e. ~/mysubdir vs /home/me/mysubdir vs mysubdir.
- 我想提供給死,如果它不是一個根路徑 存在的論點。 os特定於unix。
- 或者,給定一個目錄,如果存在它的完整根路徑?
如何檢查路徑/目錄是否存在(-d)並且是根目錄中的完整路徑名?檢查一個目錄是否存在絕對路徑
i.e. ~/mysubdir vs /home/me/mysubdir vs mysubdir.
use strict;
use warnings;
use feature 'say';
use Cwd qw/abs_path getcwd/;
use File::HomeDir;
my $path = 'foo/../bar';
if($path =~ /^~/) {
my $home = File::HomeDir->my_home;
$path =~ s/^~/$home/;
}
if($path !~ m!^/!) {
$path = getcwd . "/$path";
}
my $full_path = abs_path($path);
if(defined $full_path && -d $full_path) {
say "$full_path exists";
} else {
say "$path is non-existant";
}
File::Homedir
將讓你獲得一個用戶的主目錄,你 再更新波浪路徑。
如果此時路徑不與/
啓動(是相對路徑)在前面加上getcwd
當前工作目錄,得到一個絕對路徑。
完成之後,您可以通過abs_path
來解決.
和..
之類的問題以及符號鏈接。
最後,您可以使用-d
來測試結果路徑是否存在。
只是一些可能使搜索更容易的術語:你稱之爲「根路徑」的東西通常稱爲絕對路徑,而「非根路徑」稱爲相對路徑。 – ThisSuitIsBlackNot
絕對路徑是在代字符擴展之後以斜線開始的路徑。您可以通過查找代字符或斜線來快捷,並在代碼中稍後單獨處理無效的代字符擴展。 – tripleee
@tripleee關於代字號的小心,並非所有程序都將其解釋爲$ HOME。嘗試'perl -MFile :: Find -e'find(sub {print「$ File :: Find :: name \ n」;},「〜」);'---它不打印任何東西,但顯然我確實有文件在'〜'中。 – Robert