人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

必要があって、perlを5.8.0→5.8.6にアップデートしました。(Activeperlにて)
SSH接続でのコマンドラインからはperl -vが5.8.6で成功しましたが、
cgi(apache?http?)では5.8.0のままです。

質問はcgiも同様に5.8.6にする方法です。
・どこかにパスを通すのか
・設定ファイルを編集するのか
・旧バージョンを削除するのか、
調べてもわかりませんでした。どうすればいいですか?
インストールはsh ./install.shで行い、vi ~/.bashrcの設定はしました。
-
-
参考までにディレクトリはこのようになっています。
./var/www/vhosts/.skel/0/httpdocs/test/perl
./var/www/vhosts/.skel/0/httpsdocs/test/perl
./var/www/vhosts/mydomain.com/httpsdocs/test/perl
./usr/share/doc/bash-2.05b/loadables/perl
./usr/share/doc/db4-devel-4.1.25/ref/perl
./usr/bin/perl
./usr/local/ActivePerl-5.8/bin/perl
./usr/local/ActivePerl-5.8/html/perl
./usr/local/ActivePerl/bin/perl
./usr/local/ActivePerl/html/perl
./usr/src/ActivePerl-5.8.6.811-i686-linux/perl
./usr/src/ActivePerl-5.8.6.811-i686-linux/perl/bin/perl
./usr/src/ActivePerl-5.8.6.811-i686-linux/perl/html/perl
環境はRedHatです

●質問者: yshkw
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:2.0 Apache bash CGI DOC
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● b-wind
●10ポイント

それはアップデートしたんじゃなくて両方導入しているだけですね。


そのままでも CGI の方で使うバージョンを変更できます。

CGI の先頭行に有る、

#|/usr/bin/perl

#!/usr/local/ActivePerl-5.8/bin/perl

に書き換えてください。

何かオプションが付いている場合も同じようにつければ動作します。


ただ、perl5.8.6 と AcrivePerl-5.8.6 は基本的には同じ挙動を示すはずですが、あくまで別実装なので細かな挙動が違う可能性があるので注意してください。

◎質問者からの返答

どうりでおかしいわけですね。ただ、

/usr/local/ActivePerl-5.8/bin/perl

には間違えてインストールした5.8.3が入っていました。5.8.6は

/usr/local/ActivePerl/bin/

内にあり、コマンドラインもここを使用していますが、

#!/usr/local/ActivePerl/bin/

と記述するとcgiではKcatchエラーすら見れなくなりました。

#!/usr/bin/perl

のperlを5.8.6にするにはどうすればいいでしょうか?

ActivePerlでない、一般的なバージョンアップ用のリンクと

以前の古いバージョンの安全な削除方法を教えていただけませんか?


2 ● b-wind
●8ポイント

#!/usr/local/ActivePerl/bin/

と記述するとcgiではKcatchエラーすら見れなくなりました。

この場合 perl インタープリタを指定しなければいけないので、

#!/usr/local/ActivePerl/bin/perl

を指定することになります。


一応 Perl の公式バージョンはこちらからダウンロードできます。

http://search.cpan.org/dist/perl/


ただし、一般的に Linux は Perl で記述されたコマンド等も多くディストリビューションが配布している以外のバージョンで上書きする事はオススメしません。

高い上位互換を誇るとは言え、システム全体のディストリビューション固有の設定やバージョン間の差異を吸収するにはそれなりの技術力が必要だからです。


この場合オリジナル Perl でもActivePerl でもどちらでも構いませんが、/usr/local/ 以下にインストールし CGI 側で切り替える事をオススメします。

◎質問者からの返答

上書きはあきらめた方が良いでしょうか?

もうすでに、コマンドラインではperl -vで5.8.6が出てるのですが・・・

-

#!/usr/local/ActivePerl/bin/perl

でもやはりInternal Server Errorが出ますね。

-

ちなみに、5.8.0(#!/usr/bin/perl)での実行ではこのようなKcatchエラーがでます。

-

[test.cgi:6:die] Can't locate Lingua/JA/Summarize.pm in @INC (@INC contains: /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 /usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.0 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.0 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.0/i386-linux-thread-multi /usr/lib/perl5/5.8.0 .) at test.cgi line 6.

BEGIN failed--compilation aborted at test.cgi line 6.

> use Lingua::JA::Summarize;

Lingua::JA::Summarize;をcgi実行するのが目的です。

再回答上限5回にしましたのでよろしくお願いします。


3 ● b-wind
●22ポイント

もうすでに、コマンドラインではperl -vで5.8.6が出てるのですが・・・

それは ~/.bashrc の設定で行われているもので、システム全体には影響しません。

現在の状況のまま勧められるのが良いかと思います。


また、

Can't locate Lingua/JA/Summarize.pm in @INC 

のエラーについてですが、この手のエラーは該当のモジュールがインストールされていない時に発生します。

この場合 Lingua::Ja::Summarize がインストールされいないのでしょう。


注意事項として、Perl モジュールはインストールされている perl 毎、またバージョンごとにインストールする必要があります。

どちらの Perl で使用されるのかはわかりませんが使用する Perl の方に該当モジュールをインストールしてください。

◎質問者からの返答

これまで、コマンドライン用のパールのみ。アップデート・モジュール整備していたということがわかりました。

-

先ほどrpmで5.8.6をインストールして

#!/usr/local/ActivePerl-5.8/bin/perl

のcgiが実行できるまでになりました。

さてコマンドライン用ではなく、cgi用(?と言うのですか?)のcpanや、モジュールはどうインストールすればいいですか?

perl Makefile.PL && make && make installとコマンドラインで入力したものは、すべてコマンドライン用のperlに追加されています。

ブラウザ経由でのperlとコマンドライン経由のperl、使い分け方をご教授ください。


4 ● b-wind
●50ポイント ベストアンサー

この場合 ActivePerl の使い方となりますね。

両方ともコマンドラインでも CGI でも使えるのでその呼び方は混乱を呼びそうです。

Perl ( /usr/bin/perl ) と ActivePerl ( /usr/local/ActivePerl-5.8/bin/perl ) と呼称します。


ActivePerl インストール前に使用していたモジュールは当然 Perl 用にインストールされているはずです。

CGI 用に ActivePerl を使うなら必要なモジュールをこちらにもインストールする事になるでしょう。

ActivePerl 独自の方法として ppm による管理があります。

すでに用意されているパッケージであればこちらでインストールするのが楽です。

/usr/local/ActivePerl-5.8/bin/ppm コマンドで実行できるはずです。


また、ActivePerl は従来の cpan も使えます。

使用方法はまったく同じですが、その時々で使用されている Perl/ActivePerl どちらを使用しているか混乱を避ける為に、最初の Makefile.PL 実行時に

Perl 用の場合
$ /usr/bin/perl Makefile.PL
ActivePerl 用の場合
$ /usr/local/ActivePerl-5.8/bin/perl Makefile.PL

とすれば適切に Makefile が生成されます。

あとの make ; make install は同じです。

◎質問者からの返答

うまく動きました。やっとlinuxの方も使えるようになった気がします。

ありがとうございました。またごひいきによろしくお願いします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ