- ベストアンサー
現在のディレクトリパスを取得するには!?
perlにて現在のディレクトリパスを取得するにはどのようにすればいいのでしょうか? モジュールをつかってcwd()で取得できるようなのですが、モジュールが入っていないサーバでも動くようにしたいのですがうまくできません・・・ どなたかご存知でしたら教えてください。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
if($^O eq "MSWin32"){ $cwd=`cd`; } else { $cwd=`pwd`; } print $cwd; -------------- ぐらいでいいんじゃないでしょうか
その他の回答 (7)
- umasikajiro
- ベストアンサー率67% (545/803)
あ~すみません、serverがwinでしたね なら#7のは使えません というか結局普遍的に使えるのはCWDしか無いのでは? どうしても駄目なら $0 , __FILE__ 環境変数のPWD , SCRIPT_FILENAME , PATH_TRANSLATED(IISの場合) のうち使えるものを選択して試すとか?
- umasikajiro
- ベストアンサー率67% (545/803)
コマンドラインからの実行なら $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)
> Perlでは$0という特殊変数に実行したスクリプトのフルパスが保存されています。 フルパスとは限らないみたいですけど? 実際perlvarの$0の項目にも「フルパスで」名前が格納されるとはかかれていません。
- bgbg
- ベストアンサー率53% (94/175)
確かに外部コマンド(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)
#1>opendir()でディレクトリ内のファイル一覧を行いたく、また階層も行き来できるようにしたい カレントディレクトリは、別に取得しなくてもいいんじゃないかなあ。 あと スクリプトの実行ディレクトリということであれば、 __FILE__ から取り出せるかもしれない。
- sakusaker7
- ベストアンサー率62% (800/1280)
#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)
> 、モジュールが入っていないサーバでも動くようにしたいのですがうまくできません・・・ どのような手段を試したのでしょうか? ざっと見たところ、OSのアーキテクチャによって実際に取得を行う 手段を切り替えているようなので、OSによらず動くようにというのは 多分無理です(バイナリで記述する必要があるものがある)。
補足
opendir()でディレクトリ内のファイル一覧を行いたく、また階層も行き来できるようにしたいと考えております。cgiファイルひとつでなるべく簡単に記述したいと考えていて、そのファイルを書き換えることなく汎用性高いものを考えています。私自身、RedHat系Linuxばかりなので、OSによりバイナリとは初めて聞き勉強になりました(汗 開発環境はWindows(xampp)なので、Win系サーバでも使えたら良いかなと思います。 いろいろ調べたのですが、コマンド実行してその結果を受けるのが一番わかりやすいのではと思っておりますが多くの方はこの場合どういう考え方をされるのでしょうか?