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です
この場合 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 は同じです。
それはアップデートしたんじゃなくて両方導入しているだけですね。
そのままでも 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でない、一般的なバージョンアップ用のリンクと
以前の古いバージョンの安全な削除方法を教えていただけませんか?
#!/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回にしましたのでよろしくお願いします。
もうすでに、コマンドラインでは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、使い分け方をご教授ください。
この場合 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の方も使えるようになった気がします。
ありがとうございました。またごひいきによろしくお願いします。
うまく動きました。やっとlinuxの方も使えるようになった気がします。
ありがとうございました。またごひいきによろしくお願いします。