1. ホーム
  2. perl

[解決済み] 実行中のPerlスクリプトのフルパスを取得する方法を教えてください。

2022-04-22 13:25:36

質問

Perlスクリプトがあり、実行中にスクリプトのフルパスとファイル名を決定する必要があります。スクリプトをどのように呼び出すかによって $0 は様々で、時には fullpath+filename のみで、時には filename . 作業ディレクトリも同様に変化することがあるため、確実に fullpath+filename スクリプトの

どなたか解決策をご存知ですか?

解決方法は?

いくつかの方法があります。

  • $0 は POSIX が提供する現在実行中のスクリプトで、スクリプトが CWD 以下にある場合は現在の作業ディレクトリからの相対パスです。
  • さらに cwd() , getcwd()abs_path() が提供する Cwd モジュールで、スクリプトがどこから実行されるかを教えてくれます。
  • モジュール FindBin $Bin &です。 $RealBin という変数があります。 通常 は実行中のスクリプトへのパスです。 $Script &です。 $RealScript は、スクリプトの名前です。
  • __FILE__ は、Perl インタープリタがコンパイル時に扱う実際のファイルで、フルパスも含まれます。

私は、最初の3つ( $0 は、その Cwd モジュールと FindBin モジュール) の下で失敗します。 mod_perl のような無価値な出力を生成します。 '.' または空文字列です。 このような環境では、私は __FILE__ を使い、そこからパスを取得します。 File::Basename モジュールを使用します。

use File::Basename;
my $dirname = dirname(__FILE__);