• ベストアンサー

モジュールからの相対パス指定の方法

モジュールからの相対パス指定の方法 /index.cgi /lib/mymodule.pm /lib/mymodule.cfg のような構成の時、mymodule.pmからmymodule.cfgを相対パスにて読み込むことは可能ですか? mymodule.pmとmymodule.cfg間の相対パスは常に一定だけれど、 index.cgiから、mymodule、mymodule.cfgの相対パスは変化するというような事を想定しています。 よろしくお願いします。

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

  • ベストアンサー
  • t-okura
  • ベストアンサー率75% (253/335)
回答No.3

例えば use lib qw(lib); use mymodule; で取り込まれたファイルのパスは、 $INC{ "mymodule.pm" } に "lib/mymodule.pm" として保存されています。 なので、 mymodule.pm でこの値を取り出し、mymodule.pm を mymodule.cfg に 変えれば CGI プログラムから mymodule.pm と同じディレクトリに ある mymodule.cfg にアクセスすることができます。 CPAN モジュールの Class::Inspector でも取り込んだモジュールの パスを取得することができます。

参考URL:
http://kawa.at.webry.info/200906/article_4.html
nshoes
質問者

お礼

どうもありがとうございます。勉強になりました。 ------------ __FILE__ でモジュールのパスが取れるのを思い出したのであわせて記載しておきます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

モジュールやプラグマは読み込まれた時点で、そのスクリプトの一部をなすので、モジュール側で相対パスを指定することはないですし、そのようにモジュールを書いてはなりません。  そのため、質問内容が今一つ理解できないのですが??

全文を見る
すると、全ての回答が全文表示されます。
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> mymodule.pmからmymodule.cfg 両方ディレクトリ(フォルダ)ですか? どちらもファイルなら同じディレクトリ(フォルダ)/libにあるようですが。 相対パスで可能です。 ../mymodule.cfg ..は親ディレクトリ(ひとつ上の階層)を指します。 mymodule.pmの親を指すので/libを指します。 自分でない別の子を指すので、兄弟の関係ですね。 ただし、「ディレクトリトラバーサル」というセキュリティ面の問題とを一読しておいてください。

nshoes
質問者

補足

ご回答ありがとうございます。 説明が足りなくてすいません。 /index.cgi /lib/mymodule.pm /lib/mymodule.cfg の構成のとき、 ■index.cgi use lib qw(./lib); use mymodule; my $app= mymodule->new(); ■mymodule.pm my $configfile = "./mymodule.cfg"; ←★(1) open(FH, $configfile); @data = <FH>; close(FH); ■mymodul.cfg 設定が記載 のような感じで、 ★(1) の場所 にて、mymodule.pm からの相対パスを指定したいのです。 (実行cgiファイルであるindex.cgiからの相対パスではなく) index.cgiからの相対パスがなんであれ、ソースの変更なしで、 mymodule.pmからmymodule.cfgを読めるようにしたいのです。 実行cgiはindex.cgiなので、index.cgiからのパスを指定すればこのプログラムは動きますが、 ($configfile = "./lib/mymodule.cfg"みたいに。) 例えば index.cgi /lib/modules/mymodule.pm /lib/modules/mymodule.cfg のような階層構造に変更した場合、mymodule.pmの内容を $configfile = "./lib/modules/mymodule.cfg" みたいにわざわざ書き直すことなく 動作させたいと考えています。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 相対パスについて

    相対パスについて 基礎的なことですがpublic_htmlの中にあるindexまでの相対パスが分かりません。 public_html /cgi-bin/ aaa.cgi この場合aaa.cgiから見ると../なのか../../なのか? よく分からなくて困っています。

  • 相対パスについてです。

    相対パスで、 ┏/ ┣cgi-bin/second/┳here.cgi ┃    ┗jcode.pl ┃ ┣data/┳there/   ┗overthere/one.html here.cgi > there/を指定するにはどうしたらいいのですか? また、相対パスについて説明お願いします(サイトでもOK)

    • 締切済み
    • CGI
  • #pragma commentの相対パス指定

    #pragma commentの相対パス指定について、希望の動作をしないません。 状況は以下の通りです。 libというフォルダの中にlibA、libBの二つのフォルダがあり、それぞれのフォルダの中には、lib_a.lib、mylib_b.libというファイルがあるとします。 lib -libA -lib_a.lib -libB -lib_b.lib またライブラリディレクトリにはlibのパスのみが指定されていたとします。 この状況で#pragma comment(lib,"libA\\lib_a.lib")とすると、 「LINK : fatal error LNK1104: ファイル 'libA\lib_a.lib' を開くことができません。」 と出てしまいます。 #pragma commentの中では、相対パスは使えるはずなのですが、なぜこの場合はリンクが出来ないのでしょうか? ちなみに絶対パスで指定した場合はエラーは出ません。 できればフォルダで分割してライブラリを管理したいと考えているので、何か解決方法をご存知の方がいれば、ご教授ください。 環境は ・OS:Windows7 ・使用ソフト:Visual C++ 2010 Express ・言語:C++ です。

  • 相対パスについて

    初歩的なことですみません。 相対パスについて教えてください。 <public_html>---<cgi-bin>---<ccc>---<ttt.pl> *************| *************---<eee>---<test.html> こちらの構成で、(***は無視してください。) (public_htmlの下はcgi-binとeeeフォルダです。) test.htmlから見た、ttt.plのパスは ../cgi-bin/ccc/ttt.pl  でよいのでしょうか?? CGIを設置する時、ディレクトリを変えたら、動かなくなってしまったので・・・ 宜しくお願いします。

    • 締切済み
    • CGI
  • 絶対パス、相対パス、環境変数の概念が掴めない

    絶対パス相対パス環境変数についていまいち概念が掴めないのでどなたかご教示いただけないでしょうか? 絶対パスというものは指定のフォルダなどへの行き道をしていしたもの、相対パスはある程度のものだけきじゅつしてあるしか認識できておりません。 ググって探してみてもいまいちいい内容がなくて・・・ 何かいい知識の身につけ方があったら教えてください。 あと例えばCGIを使うためにActivePerlなどを入れたときに絶対パスで指定する方法があるとか言うのはどういった意味なのでしょうか?

    • ベストアンサー
    • Perl
  • Excel2010VBAでエラーが出る相対パス指定

     ExcelVBAで,Excel2007と2013で問題無いのに, Excel2010ではエラーが出る相対パス指定について, ご教示を頂けると助かります.  ExcelVBAにて, ○○.dll ファイルを 以下のように宣言して使っています. Private Declare Function LoadTT Lib ".\○○.dll" _ () As Integer  プログラムの中で, ret = LoadTT() を実行すると, Excel 2007では相対パスでの指定で問題無く動作しますが, Excel 2010では相対パスでの指定ではエラー(ファイルが見つからない)"48"が出ます. そこで,相対パス指定をやめて絶対パスに変更すると問題無く動作します.  念のため Excel2013でも試したところ, 2007と同様に,相対パス指定でも問題なく動作しました.  なお,ExcelVBAのファイル「○.xlsm」と「○○.dll」は同じフォルダーに入れています.  また, ChDrive ThisWorkbook.Path ChDir ThisWorkbook.Path の実行によるカレントフォルダーの確認も,どのバージョンでも同じに正しく確認出来ています.    因みに,バージョンの違う各Excelは別々のPCでの動作ですが,使用OSは Windows7 Professional 32bit で同じです.  以上のように Excel2010だけ動作が異なります.  とりあえずは絶対パス指定にすれば問題は解消するのですが, Excel2010で特に何か設定したということは無いので気持ち悪く, 原因と思われることでご存じ方がいらしたらご教示を頂けると助かります.  どうぞよろしくお願い致します. ==

  • パスの書き方。

    初歩的な質問です。 CGIファイルをサーバーに転送して、動作させたいのですが、どぉ~しても「CGIファイル内のパス指定が正しくない可能性があります。正しいパスをご確認ください」が出ます。どういうふうに表記したらいいのか分からないので教えてください。 サーバー内の「初期フォルダ」は、「/」です。 そこに、「index.html」ファイルと「private_html」「gate」フォルダがあります。(下図参照) / | | +--- /private_html/secret.html | | +--- /gate/gate.cgi | | index.html この状態で、「gate.cgi」ファイルから見た「secret.html」のパスはどうなりますか?(絶対パスと相対パス) あと、「gate.cgi」から見た「private_html」フォルダのパスはどうなりますか?? で、もしかするとこのディレクトリ構成自体がダメかもしれないので、パスを設定してもうまくいかないようだったら / | | +--- /private_html/secret.html | | | +--- /public_html/index.html | | +--- /gate/gate.cgi こんな風にも変えてみようかと思っています。 この場合の「gate.cgi」から見た「secret.html」のパスはどうなりますか? また、「gate.cgi」から見た「private_html」フォルダのパスはどうなりますか? 表現がうまくできていなかったらごめんなさい。m(_ _)m かなり初歩的な質問ですみません。 とっても困っているので、どうか教えてください。(再度質問するかもしれませんが・・・)よろしくお願いします。

  • 絶対パス・相対パス・ディレクトリ・について

    HTMLでホームページを作ろうとしている初心者です、教えてください 自分のホームページのフォルダの中ににリンクするパスの指定方法を相対パスというのはわかりましたが、画像を表示するためのパスの指定方法も相対パスでいいのでしょうか、それともディレクトリというんでしょうか?

  • フルパス指定に関して

    レンタルサーバーを借りており、あるプログラムの設定項目で「SSL使用のときはフルパス指定」とありサイトではSSLを使いたいので、どのアドレスを入れるのかわからなくなりご教授頂きたいです。 SSLを使わない場合、相対パスでは./shop.cgiでの設定となります。 私はSSLをつかいたいので、それをフルパス指定したいとします。 現在のサーバー上にあるサイトのフルパスが  /home/aaa/public_html/contents/shop.cgi IPアドレスからのURL  http://198.***.***.**/~aaa/contents/shop.cgi サイトのアドレスは以下を使ってるとします。  https://contents.bbb.com/shop.cgi (サブドメイン)  http://contents.bbb.com/shop.cgi (サブドメイン)  http://bbb.com/contents/shop.cgi  初歩的な質問で申し訳ありませんが、上記のどのアドレスを入れてもうまくいかないのでお判りになる方どうぞ教えてください。よろしくお願いします。

  • 相対パスとindexファイル

    よくホームページで、「ホームへ」などの、indexページへの リンクをクリックすると http://○○○.○○/index.htm と飛ぶと思うのですが、 絶対パスを使わずに相対パスを使って http://○○○.○○/ と、「index.htm」がアドレスに含まれないように飛ばすことは できないでしょうか? ご存知の方、方法を教えて下さい。

    • ベストアンサー
    • HTML
子機から音声が全く聞こえない
このQ&Aのポイント
  • 増設した子機からの音声が相手に届かず、問題の原因を特定できていない。
  • 音量設定や通話音質の確認も行ったが、相手からの音声が全く聞こえない状況が続いている。
  • Wi-Fiルーターの機種名や関連するソフト・アプリについては不明であるが、問題の解決方法を教えてほしい。
回答を見る