perlの実行可能ファイルのクリーンアップされた絶対パスを取得する方法はありますが、シンボリックリンクは保持していますか? ($^X
変数から、またはとにかく)
perl 実行可能ファイルの例:
$ ls -l /opt/local/bin/perl
lrwxr-xr-x 1 root admin 8 18 nov 02:46 /opt/local/bin/perl -> perl5.12
/opt/local/bin/perl
perl インタープリターの実行方法に関係なく、スクリプトを取得したい。
テスト コード (changesbang.pl):
use strict;
use warnings;
use Cwd;
use File::Spec;
use Config;
my $fmt = "%-25s: %s\n";
printf $fmt, "The value of ^X", $^X;
printf $fmt, "Cwd::realpath", Cwd::realpath($^X);
printf $fmt, "Cwd::abs_path", Cwd::abs_path($^X);
printf $fmt, "File::Spec->cannonpath", File::Spec->canonpath($^X);
printf $fmt, "File::Spec->rel2abs", File::Spec->rel2abs($^X);
printf $fmt, "Config{perlpath}", $Config{perlpath};
上記を次のように実行すると
$ ../../../../../opt/local/bin/perl changesbang.pl
The value of ^X : ../../../../../opt/local/bin/perl
Cwd::realpath : /opt/local/bin/perl5.12
Cwd::abs_path : /opt/local/bin/perl5.12
File::Spec->cannonpath : ../../../../../opt/local/bin/perl
File::Spec->rel2abs : /Users/jm/Develop/perl/changesbang/../../../../../opt/local/bin/perl
Config{perlpath} : /opt/local/bin/perl5.12
欲しいものは誰も返してくれない/opt/local/bin/perl
問題は、必要な perl の実行可能パスを制約付きで取得する方法です。
- 絶対パスをクリーンアップする必要があります
- ただし、それがシンボリック リンクである場合は、それを保持する必要があります (ターゲットに変更しないでください)。