3

現在実行中の Perl スクリプトへのフル パスを見つける必要があります。つまり、

  • ~/dir/my.pl の場合、「/home/user/dir/my.pl」にする必要があります。「$0~/dir/my.pl」が表示されます。

  • ./my.pl の場合、「/home/user/dir/my.pl」が必要です。

など ありがとう!

4

6 に答える 6

6

FindBinモジュールを使用します。

$ cat /tmp/foo/bar/baz/quux/prog
#! /usr/bin/perl

use FindBin;

print "$FindBin::Bin/$FindBin::Script\n";

$ PATH=/tmp/foo/bar/baz/quux prog
/tmp/foo/bar/baz/quux/prog

$ cd /tmp/foo/bar/baz/quux

$ ./prog 
/tmp/foo/bar/baz/quux/prog
于 2009-06-23T16:11:03.987 に答える
5

File::Specでrel2abs関数を探しているようです。例えば:

#!/usr/bin/perl

use File::Spec;
my $location = File::Spec->rel2abs($0);
print "$location\n";

これにより、次のように$0が解決されます。

$ ./myfile.pl
/Users/myname/myfile.pl
$ ~/myfile.pl
/Users/myname/myfile.pl

または、まったく同じ方法でCwd::abs_pathを使用することもできます。

于 2009-06-23T16:14:42.833 に答える
2

FindBinまたはFindBin::Realを見てください。

于 2009-06-23T16:01:20.973 に答える
1

パスを絶対値に展開するだけでよいようです。その方法については、この記事を確認してください。

于 2009-06-23T15:54:28.537 に答える
0

FindBinモジュールを使用する

于 2009-06-23T16:12:11.790 に答える
0

ファイル自体がシンボリック リンクである場合、前述の概念の多くは機能しません。私は通常、次の方法でスクリプトを開始します。

use strict;
use English;
use warnings;

use Cwd qw(realpath);
use File::Basename;
use lib &File::Basename::dirname(&Cwd::realpath($PROGRAM_NAME));

うまくいけば、これが役に立ちます。

于 2012-02-10T17:27:53.543 に答える