1

Suse Linux で perl58 から perl588 に perl をアップグレードします。以前のバージョン用の Config.pm が存在するにもかかわらず、新しいバージョンをインストールすると古いバージョンが破損するようです。HP や AIX などの他の OS で Perl をアップグレードしても、古いバージョン。例: perl58 および perl588 バージョンは、次のように "/usr/standard_perl" というフォルダーに存在します。

/usr/standard_perl/perl58 (directory)
/usr/standard_perl/perl588 (directory)

それを指すシンボリックリンクがあります。

アップグレード前後のリンクは次のとおりです。

前:

perl58_link -> /usr/standard_perl/perl58

後:

perl5_link ->   /usr/standard_perl/perl588 
perl58_link ->  /usr/standard_perl/perl588
perl588_link -> /usr/standard_perl/perl588

/usr/standard_perl/perl58/bin から単純な「./perl -V」コマンドを実行しようとすると、古いバージョンは、独自のツリー構造に非常によく存在するにもかかわらず、Config.pm が見つからないと訴えます。

Linux では、perl が @INC のハードコードされたパスに従っているということですか。この種の動作は Linux でのみ観察されます。

古いバージョンで実行されているスクリプトがあるため、本番環境に移行できないのではないかと心配しています。この種の動作が存在する場合、修正が可能かどうか、またはこれが Linux の既知の動作であるかどうかを知る必要があります。

アップグレード後の古いリンクが新しいバージョンを指すようになり、リンクだけでは不十分で、LINUX でさらに何かを変更する必要があるため、これが原因である可能性はありませんか?

注: 1.Perl モジュールは、バージョンごとに個別に維持されます。 2.以前のバージョンのファイルを混在させていません。3. 運用サーバーで実行されているすべての古い perl スクリプトが破損しないようにし、代わりに最新バージョンを使用して Perl バージョンのメンテナンスを行います。3a.したがって、独自のバージョンではなく最新バージョンを指すリンクを微調整する必要があります。

観察: Linux でのみ、この動作が見られます。注目すべき点の 1 つは、古いバージョンのリンクを最新バージョンに微調整するときです。@INC は、LINUX ではなく、最新バージョンの INC に対して自動的に更新されます。

ここで何か不足していますか?

4

3 に答える 3

3

Linuxでこの問題を見たことはありません。元の perl をその場所 (/usr/bin/perl) に残し、自分の perl をコンパイルして /usr/local/bin (またはその他) にインストールします。古いバージョンの破損は見たことがありません。

本当なの

  • どのようにして /usr/standard_perl/perl588 (コンパイル済み、rpm 形式などで指定、コンパイル済みの tarball など) を持つようになったのか
  • コンパイルを構成するときに使用したオプション

詳細についても非常にあいまいです-perl58_link、standard_perlなど-これは本当にどこですか? ほとんどの場合は問題になりませんが、場合によっては問題になります。

リンクを元に戻すと、うまくいきますか? 5.8.8 ツリー全体を別の場所に移動すると、うまくいきますか? ベース perl を RPM などから復元して、動作させることはできますか? IMO、基本的な perl の動作が最も重要であり、セカンダリ perl は常にボーナスです。(シェル、awk、sed、さらには python など、ディストリビューションがパッケージ管理に使用する他のコア UNIX ツールについても同じ意見を持っています。Java のようなコア以外のツールについてはそうではありませんが、Java アプリを実行している場合は本番環境では、ここでも同じことが言えます。)

于 2009-04-21T21:06:44.953 に答える
1

システムperl実行可能ファイルをそのままにして、独自にコンパイルし、コンパイルしたものを使用してPerlプログラムを実行します


Perlで書かれたすべてのシステムプログラムは、次で始まる必要があります。

#! /usr/bin/perl

すべての非システムPerlプログラム、ユーザー作成プログラム:

これは、で最初に見つかったperl実行可能ファイルを使用し$PATHます。(''と同じwhich perl

#! /usr/bin/env perl

もう1つのオプションは、使用する実行可能ファイルの場所を正確に指定することです。

#! /opt/bin/perl

#! /opt/perl/bin/perl

#! /opt/perl/5.10.0/bin/perl

#! /opt/perl-5.10.0/bin/perl

#! /home/$user/perl/bin/perl

#! ~/bin/perl

または、perl実行可能ファイルへのパスが何であれ。

于 2009-04-22T16:57:46.527 に答える
0

/usr/bin/perl自分でコンパイルしたものと交換しないでください。

これを Ubuntu 7.10 で 1 回実行したところ、システムが壊れてしまいました。ログインして、ほとんどすべてのことを行うことができましたが、たとえば、外観を変更することはできませんでした。私はsudo nano $filename自分のコンピュータ上のすべての Perl プログラムで ' ' を実行することになり、Perl 5.8 ではなく Perl 5.10 で実行されるように変更しました。

その後、Ubuntu 8.10 を最初からインストールする必要がありましたが、ついに出てきました。

モジュールを使用cpanまたはcpanpインストールすると、互換性のない機能が変更される可能性があるため、非互換性が発生する可能性もあります。また、非バイナリ互換のperl実行可能ファイルの場合、必要なすべてのモジュールを再インストールする必要がありますXSubs

そのため、私が作成するすべての Perl プログラムでは、ヘッダー ' #!/usr/bin/env perl' を追加し、Perl 実行可能ファイルへのパスを$PATH変数の先頭に追加します。

于 2009-04-23T16:49:14.903 に答える