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
@treepleeeチルダについては注意してください。すべてのプログラムが$ HOMEを意味すると解釈しているわけではありません。 '$ file :: Find :: name \ n";}、 "〜"); '' ---それは何も表示しませんが、明らかに私は持っています'〜'のファイルです。 – Robert