1

フォルダーへの相対パスを取るスクリプトがあります。指しているフォルダ/ディレクトリの名前を取得する方法はありますか? 必要に応じて、絶対パスにすることもできます。正規表現を使用して削除します。

私が実行しているとしましょう:

/example/a/b/c/d/perl.pl

例 1

彼らが入力した場合:

../../

「b」を返すことができるようにしたい(またはbまでの絶対パス、それを取り除くスクリプトを書くことができる)。

例2

彼らが入力した場合:

./

「d」(または、d までの絶対パス) を返せるようにしたいです。

これを行う簡単な方法はありますか?私が考えることができる唯一の方法は../、ファイルの絶対パスで正規表現を実行するために数を数えることです。これには多くの処理が必要です。

ありがとう

4

2 に答える 2

5

それは簡単です - Cwdモジュールを使うだけです:

use Cwd 'abs_path';
my $abs_path = abs_path($file); 
于 2012-10-27T14:36:54.370 に答える
2

実行中のスクリプトに関連して(要求どおり):

use Cwd            qw( realpath );
use File::Basename qw( dirname );

my $script_dir = dirname(realpath($0));
my $abs_path = real_path("$script_dir/$rel_path");

現在の作業ディレクトリとの相対:

use Cwd qw( realpath );

my $abs_path = realpath($rel_path);

どちらの場合も、シンボリック リンクは解決されます。File::Spec は、必要に応じてシンボリック リンクを解決しない関数を提供します。

于 2012-10-27T17:44:05.617 に答える