必要があって、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です

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2007/01/14 08:54:41
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:b-wind No.4

回答回数3344ベストアンサー獲得回数440

ポイント50pt

この場合 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 は同じです。

id:yshkw

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

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

2007/01/14 08:53:31

その他の回答3件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント10pt

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


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

CGI の先頭行に有る、

#|/usr/bin/perl

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

に書き換えてください。

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


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

id:yshkw

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

/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でない、一般的なバージョンアップ用のリンクと

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

2007/01/12 20:47:21
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

ポイント8pt

#!/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 側で切り替える事をオススメします。

id:yshkw

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

もうすでに、コマンドラインでは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回にしましたのでよろしくお願いします。

2007/01/13 00:08:35
id:b-wind No.3

回答回数3344ベストアンサー獲得回数440

ポイント22pt

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

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

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


また、

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

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

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


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

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

id:yshkw

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

-

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

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

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

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

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

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

2007/01/13 05:25:39
id:b-wind No.4

回答回数3344ベストアンサー獲得回数440ここでベストアンサー

ポイント50pt

この場合 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 は同じです。

id:yshkw

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

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

2007/01/14 08:53:31

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません