• ベストアンサー

現在のディレクトリパスを取得するには!?

perlにて現在のディレクトリパスを取得するにはどのようにすればいいのでしょうか? モジュールをつかってcwd()で取得できるようなのですが、モジュールが入っていないサーバでも動くようにしたいのですがうまくできません・・・ どなたかご存知でしたら教えてください。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

if($^O eq "MSWin32"){ $cwd=`cd`; } else { $cwd=`pwd`; } print $cwd; -------------- ぐらいでいいんじゃないでしょうか

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

その他の回答 (7)

回答No.8

あ~すみません、serverがwinでしたね なら#7のは使えません というか結局普遍的に使えるのはCWDしか無いのでは? どうしても駄目なら $0 , __FILE__ 環境変数のPWD , SCRIPT_FILENAME , PATH_TRANSLATED(IISの場合) のうち使えるものを選択して試すとか?

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

コマンドラインからの実行なら $ENV{'PWD'} にフルパスがそのまま入るかと思います。(CGIでは駄目) CGIの場合は $ENV{'SCRIPT_FILENAME'} =~ m|[^/]+$|; # これで $` にフルパスが入る print "現在のディレクトリ = $` <P>\n";# 当然コマンドラインでは駄目 $0 や __FILE__ は少なくともfedora5ではコマンドライン、CGIともにパス無しのfile名 /home/tarou/test.cgi なら test.cgiしか入りません fedora以外でも Apache+suexecではCGIで実行するとパス無しになったはずです

全文を見る
すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.6

> Perlでは$0という特殊変数に実行したスクリプトのフルパスが保存されています。 フルパスとは限らないみたいですけど? 実際perlvarの$0の項目にも「フルパスで」名前が格納されるとはかかれていません。

全文を見る
すると、全ての回答が全文表示されます。
  • bgbg
  • ベストアンサー率53% (94/175)
回答No.5

確かに外部コマンド(pwdやcd)を使った方が手っ取り早いですが、それではOS依存になってしまいます。 完全にOS依存にしない形にする場合ですが、Perlでは$0という特殊変数に実行したスクリプトのフルパスが保存されています。 これを利用し、chdirするたびにこの変数の値を書き換えることによりディレクトリパスの管理ができそうです。 # スクリプト起動時のディレクトリ取得 $main::cwd = $0; $main::cwd =~ s|(.*)/.*|$1|; # ディレクトリ部分のみ抜き出し &my_chdir('foo'); sub my_chdir{ my $path = shift; chdir($path); # サブディレクトリに移動 $main::cwd = (略) # ディレクトリ移動ごとに書き換え }

全文を見る
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

#1>opendir()でディレクトリ内のファイル一覧を行いたく、また階層も行き来できるようにしたい カレントディレクトリは、別に取得しなくてもいいんじゃないかなあ。 あと スクリプトの実行ディレクトリということであれば、 __FILE__ から取り出せるかもしれない。

全文を見る
すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

#2さんの回答に関して。 確かにそれでできるかもしれませんが、汚染チェックにひっかかりませんか? Cwd.pmの中でも同じようなことをしていますが、 # Find the pwd command in the expected locations. We assume these # are safe. This prevents _backtick_pwd() consulting $ENV{PATH} # so everything works under taint mode. と但し書きがあります。 また、コマンドは絶対パスで呼び出しています。 もちろんこれらのリスクをわかった上で、それでもいいというのなら 止めませんが。

全文を見る
すると、全ての回答が全文表示されます。
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

> 、モジュールが入っていないサーバでも動くようにしたいのですがうまくできません・・・ どのような手段を試したのでしょうか? ざっと見たところ、OSのアーキテクチャによって実際に取得を行う 手段を切り替えているようなので、OSによらず動くようにというのは 多分無理です(バイナリで記述する必要があるものがある)。

sa7s0ylx
質問者

補足

opendir()でディレクトリ内のファイル一覧を行いたく、また階層も行き来できるようにしたいと考えております。cgiファイルひとつでなるべく簡単に記述したいと考えていて、そのファイルを書き換えることなく汎用性高いものを考えています。私自身、RedHat系Linuxばかりなので、OSによりバイナリとは初めて聞き勉強になりました(汗 開発環境はWindows(xampp)なので、Win系サーバでも使えたら良いかなと思います。 いろいろ調べたのですが、コマンド実行してその結果を受けるのが一番わかりやすいのではと思っておりますが多くの方はこの場合どういう考え方をされるのでしょうか?

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

関連するQ&A

  • 上位階層のディレクトリパスを取得する方法

    Perlで、あるディレクトリの1つ上のディレクトリパスを 取得する方法を教えていただけないでしょうか。 Perlは初心者ですので、わかりやすくお願いします。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ディレクトリパスの取得について

    いつもお世話になっております。 VB6.0開発を行っております。 今回は、ChDirについて教えていただきたいのですが。 アプリの実行ディレクトリのひとつ上の階層のディレクトリパスを取得したいのですが、どのようにするのが最良の方法でしょうか? App.Pathで実行ディレクトリは取得できるのですが、そのひとつ上の階層のディレクトリはどのように取得すればいいのでしょうか。 システムの中で、ひとつ上のディレクトリをカレントディレクトリに設定したいのですが、よろしくお願いします。

  • 使用可能なモジュールの一覧取得

    レンタルサーバ内で、Perlのどんなモジュールが使用可能かどうかを調べたいのですが、一覧で取得する方法はありませんでしょうか? どうぞよろしくお願いします。

    • ベストアンサー
    • Perl
  • クエリーの処理にかかった時間を取得したい by perl

    perlプログラムからDBIモジュールを利用して、 外部DBサーバーにアクセスしています。 (MySQL 3.23.58) よく、phpmyadminなどで、クエリーを実行した時、 "実行時間 0.0431秒"などと表示させているサービスを見ます。 いろいろ調べてみましたが、回答にはたどり着けませんでした。 上記の環境で、実行時間を取得するにはどうすればよいのでしょうか? ご存じの方がおられましたら、ぜひアドバイス頂けますようお願いします。

    • ベストアンサー
    • MySQL
  • モジュールを使わずhttpデータ取得

    UNIX,LINUX,WinのPerlで動きなおかつ、モジュール(lwpなど)を使わずhttpデータ取得したいのですが何かいいサンプルなどないでしょうか? お手数おかけしますが、よろしくお願いします!

    • ベストアンサー
    • Perl
  • 現在アクティブなフォーム名を取得するには

    アクセスの標準モジュールでのプロシージャーで、現在アクティブなフォーム名を取得したいです。 フォームモジュールなら、Me.Nameでイケますが、すべてのフォームから使えるように、 標準モジュールで作りたいのですが、どうすればいいでしょう? Debug.Print ActiveForm.Name とすると、コンパイルエラーになります。 Debug.Print ActiveForms.Nameでも同じです。ご回答よろしくお願いします。

  • load averageの取得

    load averageを確認する為に、perlにてload averageを取得して表示させていますが、別のサーバー(複数台)のload averageを取得して表示することは可能ですか? もし、可能でしたらどのように取得したらいいのでしょうか? ご存知の方、よろしくお願いします。

  • HTTPヘッダの取得方法

    PerlにてHTTPヘッダの情報を取得したいと考えています。 通常ならば、 $ENV{'<ヘッダ名称>'} で取得できるはずなのですが、 今回取得しようとしているヘッダはHTTPの標準ヘッダではありません。 proxyサーバにてログインを行い認証されますと、 そのproxyサーバが独自にHTTPヘッダに値を追加する仕様になっています。 テストではJavaですとproxyが設定したヘッダ情報を取得できるのですが、 ことPerlになると取得することができません。 ※Javaと今回動かすPerlは同一サーバで動かします。 HTTP標準以外のヘッダ情報はどのように取得すれば良いのでしょうか? なお、PerlのVerは5.6.1、OSはLinuxです。

  • POSTでデータを送信する方法。

    他のサーバーのCGIに対してPOSTでデータを送信する方法を探しています。 Perlバージョンは5.8 使用可能モジュールはPerl5.8 標準モジュール もしくはPurePerlモジュール この環境でPOSTを扱う方法をご存知でしたら、教えていただきたく思います。

  • CGIでのHTMLソース取得について

    現在CGIでのHTMLソース取得を考えています 色々と調べてみたのですがLWPやHTTP::Liteを使う方法が見つかりましたが 使用しているレンタルサーバーの仕様上それらのモジュールの使用が出来ないため 他の方法での取得ができないか考えています cronでの運用を考えているためなるべくcgiもしくはphpなどのサーバーサイドスクリプトで作りたいと考えています ご回答お願いします

    • ベストアンサー
    • CGI
このQ&Aのポイント
  • IP7200で印刷中に急に画像全体が藤色がかってしまい、クリーニングしても治らない問題が発生しています。
  • この問題はキヤノン製品であり、IP7200の印刷時に起こるものです。
  • クリーニングをしても問題が解決しないため、解決策を探しています。
回答を見る