• ベストアンサー

windowsでperl

perlに関する知識に乏しい者ですが質問です。 windowsserver2008にactiveperl5.8.9をインストールしました。 とあるperlプログラムをcgiで動かそうと、apacheもインストールしました。 ですが、サーバーにアクセスするとそのperlプログラム中のgetpwnamという 関数?が実装されていないとエラーがはかれていました。 getpwnamをググってみたのですが、 この関数はwindowsでは実装されてないようです。 なんとかgetpwnamのエラーを解決できないでしょうか? PPMで、必要なモジュールをインストールすれば解決できるレベルであれば、 どれをインストールすればよいのか教えていただけると幸いです。

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

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

使用目的が分かりませんが、私は cygwinを使っています。 UNIX互換環境を作るために、パーテーションを一つ用意して、そのルートにCygwinを入れています。  apacheは、そのドライブの/usr/local/apache に、perlは /usr/local/bin/perl にと・・cygwinのperlには、getpwnamがあるはずですが、CPANから入れることもできるかな??  Pathを付加するためのハック ( http://film.rlss.okayama-u.ac.jp/~kgk/nnml+/index_old03.html )のサイトの、「Pathを付加するためのハック」のあたりに、activePerlからの利用方法がありそうな気がする。

ratsbane
質問者

お礼

このサイトにあることを実際に試してみました。 ですが、私のやり方が悪いのか、やはりgetpwnamでエラーとなりました。 今はcygwinを入れました。 まだいろいろと行き詰ってますが・・ ありがとうございます。

その他の回答 (1)

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

 その関数はWindows+ActivePerlじゃ使えないYO!  getpwnamはPOSIX互換システム上でパスワードファイルから情報を取得するもので、そもそもパスワードファイルの仕組みが備わってないWindowsで使えるはずがないなり。  ところでWindows Server 2008にはSUA(Subsystem for Unix-based Applications)なる機能が標準で備わっており、そいつをインストールすると一応パスワードファイルの仕組みをWindowsで使う事はできるのだが、Win32(or Win64)サブシステム上で動作しているActivePerlからPOSIXサブシステムにはアクセスできないため、Win32Apache+ActivePerlでは動作しないだろう。SUA上で動作するApacheとPerlを導入してそちらで動作させるとひょっとしたらうまくいくかも知れない。この場合、バージョンは知らないがSUAにはPerlは最初から入っているので用意するのはApacheだけで良い。  分かりやすく回答すると、あきらめてLinux辺り使うか、どうしてもWindows Server 2008上で動作させたければgetpwnamの部分をWindowsのADから情報とってくるように改造するかSUAを試してみるしかないね。

ratsbane
質問者

お礼

perlプログラムのgetpwnamの部分を強引に変更してみました。 そうすると動いたのですが、 別の個所で引っかかります。 このperlはどこかのサイトからダウンロードしたもので、 これまでレンタルサーバー上のcgi-binに配置して動かしてました。 それを自社サーバーのwindowsで動かそうとしていました。 レンタルサーバーはlinuxだったためかperlが問題なく動いておりましたが、 自社サーバーでは同じようには動かなくて質問いたしました。 アドバイスありがとうございました。

関連するQ&A