こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

windowsでperl

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

投稿日時 - 2010-02-18 23:00:21

QNo.5688050

困ってます

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

使用目的が分かりませんが、私は
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からの利用方法がありそうな気がする。

投稿日時 - 2010-02-19 08:40:44

お礼

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

投稿日時 - 2010-02-27 14:21:43

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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を試してみるしかないね。

投稿日時 - 2010-02-19 00:20:41

お礼

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

投稿日時 - 2010-02-27 14:26:38