perlでrequireされたファイル自身のフルファイル名を取得する方法

このQ&Aのポイント
  • perlでrequireされたファイル自身のフルファイル名を取得する方法を教えてください。__FILE__ だとパス情報がありません。
  • 起動したスクリプトではないので、$ENV["SCRIPT_FILENAME"] , $0 では取得できません。どこに格納されているのでしょうか?%INCでは無理ですし、@INCを使う方法では信憑性にかけます。
  • requireするときにパスをグローバル変数に代入せずに、どうしてもrequireされたファイル自身で同じフォルダ名を確実に取得する必要があります。ご教授いただけますと幸いです。
回答を見る
  • ベストアンサー

perl でrequireされたファイル自身のフルファイル名を取得する

perl でrequireされたファイル自身のフルファイル名を取得する方法を教えてください __FILE__ だとパス情報がありません。 また 起動したスクリプトではないので $ENV["SCRIPT_FILENAME"] , $0 では、取得できません。 どこに格納されているのでしょうか? %INCでは、無理ですし、@INCを使う方法では、信憑性にかけます requireするときにパスをグローバル変数に代入せずに どうしてもrequireされたファイル自身で 確実に正確な同じフォルダ名を取得する必要があるのでお願いします。 (※phpでは、__FILE__でフルパスで返ってくるので私の探し方が悪いだけだと思っています) perlでの取得方法の情報を お手数ですがよろしくお願いします

noname#123065
noname#123065
  • Perl
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.2

use Cwd 'abs_path'; print abs_path(__FILE__); または use File::Spec; print File::Spec->rel2abs(__FILE__); どちらも標準モジュールのようなので、すぐ利用可かと。

noname#123065
質問者

お礼

ネストなどのテストをして大丈夫でした。 目的のものでした ありがとうございました。

その他の回答 (1)

回答No.1

ちょっと自信がないのですが、 __FILE__には本当にパスが入ってませんか? 確かそれで合ってたように思うのですが。 また「パス情報」とはスクリプトファイルのパスということでよろしいですか? また、次のようにFindBinを使うやり方はどうでしょうか。 use FindBin (); print $FindBin::Script; ただこの方法では自分の環境だと相対パスが保存されていました。

noname#123065
質問者

お礼

ご回答ありがとうございます 今回探していたのものとは、違いました。

関連するQ&A

  • pp (Perl Packager) で requireの代わりになるもの

    ActivePerl v5.8.7 をWin-2000で使っています。 オリジナルのスクリプト内で、これもオリジナルのモジュールをrequireしている場合に、 ppでexe形式に変換できるのですが、他のPCでコピーして使おうとしたときに、 ”require先のファイルが無い”とエラーになってしまいます。 これを回避する方法はないでしょうか? (requireの代わりに、該当箇所にモジュールファイルの内容すべてをペーストしてしまう、ということで一時凌ぎはできるのですが、何か違うような気がしています) よろしくお願いいたします。 ------------------------ #!perl require "c:\\perl\\sub\\userfunc.pm"; : : ------------------------ pp -o sample.exe sample.pl c:\perl\sub\userfunc.pm とやって、exeを作っています。 (c:\perl\sub\userfunc.pmを持たないPCで)実行すると、 C:\>sample.exe Can't locate c:\perl\sub\userfunc.pm in @INC (@INC contains: ・・・/inc CODE(0xdca6ac) . CODE( 0xdca7cc)) at script/sample.pl line 2.

    • ベストアンサー
    • Perl
  • SSIで呼び出したURLの取得

    a.shtmlから ../a.cgi をSSIで呼び出したとき、a.shtmlのURLを取得したいのですが、うまい方法はありますでしょうか。 $ENV{'REQUEST_URI'} $ENV{'SCRIPT_FILENAME'} $ENV{'SCRIPT_NAME'} で表示してみたら、a.cgiのURL(パス)が出てきて、a.shtmlのURL(パス)が出てこなかったのです。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • ファイル名の取得について

    よろしくお願いします、 環境はWindows 2000 SP4 Visual Studio VC8です openFileDialogクラスのFileNameメソッドで フルパスのファイル名を取得できますが、 ファイル名だけ取得したい場合はどのメソッドまたはクラスを使用したら出来るでしょうか?

  • ファイル名を取得できない

    次のようなソースでディレクトリ内のファイル名を取得しようとしています。 $dh=opendir("."); while(($entry=readdir($dh))){ if(is_file($entry)){ print $entry."<>"; } } closedir($dh); このソースを、取得したいディレクトリ内で動かすとまったく問題ないのですが、ディレクトリのパスを1個上の階層などから相対パスで指定すると、.phpファイルと.htmlファイルは取得するのですが、ほかのファイル名は取得されなくなってしまいます。 何かphp.iniなどで設定があるのでしょうか。 回避方法がありましたら是非ご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 秀丸マクロ ファイルのパス取得方法

    秀丸マクロでファイルのパスを取得する方法を教えてください。 filenameでフルパスを取得できるのは分かったのですが、ファイル名の無いパスを取得したいです。 filenameからbasenameを使って、ファイル名の部分を消す方法で出来ればと思ったのですが、マクロ内の文字列変数の置換方法が分かりませんでした。 すみませんがよろしくお願いします。

  • Perl require 共通の変数 外部ファイル

    ファイルが多くなってきて、その中でも共通の変数があるので 外部ファイルにまとめたい・・・ ~test.pl~ #!/usr/bin/perl require("testcommon.pl"); print qq(Content-type: text/html\n\n); print <<END; <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=$CHARSET"> <title>外部CGIファイル読み込み</title> </head> <body> END print qq($test<br>$data<br>$NEW); print <<END; </body> </html> END exit; 1; ~testcommon.pl~ #!/usr/bin/perl $test = "テスト"; $data = "テストです"; $CHARSET = "UTF-8"; $NEW ="サーバー"; 1; まずこれが現在テスト中で サーバーAでは、これでいけているのですが、 サーバーBでは、これではいけず、 エラーログを見ると 「@INC~/usr/local/lib64/perl5~」 とでてます。これがどのような意味をささしているのかわからないです。 いつも1行目に書く「#!/usr/bin/perl」の部分を書き換えてみたのですが・・・ さらにサーバーBでは、ログファイルなど開く際、フルパスでないと開けません。 require("testcommon.pl");←これですと インターネットサーバーエラーとなってしまいます。 これはエラーログを見るとフルパスで指定と書いていたので、 require("/path/path/path/testcommon.pl"); のようにしました。 これで、一応表示はできたのですが、 testcommon.plで新しい変数を書き加えると、($NEW123 = "追加したい変数";) 表示されません。 またCHARSETでUTF-8を指定してますが、 更新や、再度ページに入ったりすると、 CHARSETの変数が反応していなかったりしています。ページでソースを確認すると 変数の部分が空欄になってます。 これは require("/path/path/path/testcommon.pl"); が読み込んでいなかったり読み込んでいたり もしくは、一度なにをしたのかわからないですが、このフルパスの場所に testcommon.plのファイルをおいて、そのときのままになっている など、原因、対処がわからず困っております。 ※というより結論としては、 共通の変数を1つのファイルでしようしたいということです。 ~common.pl~ $a = 123; $b = "テスト"; $c = 2; ~test1.pl~ $TEST = $a * $c; print "$b$TEST\n"; #結果「テスト246」 ~test2.pl~ $TEST123 = $a + $c; print "$TEST123$b; #結果「125テスト」 このような感じ・・・(+_+)

  • perl cgiでサブディレクト内のファイル名取得

    perl cgiでサブディレクト内のファイル名取得 例 $dir="../01/"; $id_c="*.c"; $file_c=$dir.$id_c; @InputFileAllBuf_c = glob($file_c); $InputFile = $fileAll; open IN,"$InputFile"; @InputAll = <IN> ; close(IN) ; のようにすると、指定dir内のファイル名が 取得できます。 さらに、指定dirの直下たけでなく、 指定dir内のサブディレクトも、 ファイル名を取得する方法ありますか? よろしくお願いします。

  • (初級)require等で共通ファイルを読み込む場合のパスの書き方で…。

    単純な質問です。 定数ファイル等、共通のファイルを、サイト内のPHPファイル全てで読み込みたい場合の方法について。 example.com /index.php /[const]/main.php /[page]/index.php ※[ ]はディレクトリを表す サイトexample.comにおいて、 トップページ index.phpと、 /[page]以下のindex.phpで、 同じ定数ファイルを読み込みたいとします。 例では、/[const]/main.php を読み込もうとしています。 ------------------------------ index.phpのスクリプト内では、 require_once 'const/main.php'; ------------------------------ と書け、 ------------------------------ /[page]/index.phpのスクリプト内では、 require_once '../const/main.php'; ------------------------------ と書くことになるかと思います。 このとき、読み込むファイルのパスが両者で異なりますよね。 (「../」が有るか無いかで異なる) これを、共通化したいのですが、可能でしょうか? つまり、例えばですが、 require_once 'COMMON_FILE'; と書けば、どちらのスクリプトファイルにおいても、 正しいパスが読み込まれる、というような。 また、サイトドメインが変更されても、書き換えなくて済むようにしたいです。 (例)example.com → example.net へ移動しても、書き換え要らずの方法で、何か方法を教えて下さい。 とっても、初歩的なことをお聞きして、すみません。

    • ベストアンサー
    • PHP
  • VBScriptで自身のファイル名を取得する方法

    VBScriptでは、GetAbsolutePathName()のように、ファイル名を代入しないと自身のファイル名が分からないと思うのですが、ファイル名が分からないときに自身のファイル名を取得する方法はないでしょうか。よろしくお願いします。

  • 圧縮ファイルの取得

    http://okwave.jp/qa/q8823112.html こちらで質問させていただいたように、/public_html/file.zipではなく、/file.zipの ファイルをダウンロードさせるために以下の方法を取りました。 print "Content-type: application/x-tar\n\n"; open( FH, "$filename" ); binmode FH; binmode STDOUT; print <FH>; close( FH ); この方法では、ブラウザで表示させてダウンロードできるようになったのですが、 これをperlで、wgetか、何かを使って取得したいと考えています。 ところが、wgetで試したところ、zipファイルではなく、cgiページ自体のソースの取得になってしまいました。 zipファイルを取得するにはどのようにしたらよいのでしょうか。 perlの知識があまりないので、どうしても解決できません。 宜しければ具体的に書き方を教えていただけると大変助かります。どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl