0

私が開発しているいくつかのライブラリの異なるバージョンがあり、私が作成したさまざまなplperl関数内から、に基づいて特定のバージョンをロードしたいと考えていますcurrent_database()

(IIRCが優先されるのではuseなくrequire、ライブラリをキャッシュする可能性があるためだと思いますか?)

ただし、同じサーバー上の異なるデータベースで問題が発生するのではないかと心配しています。どちらの方法でも、次のように考えています。

1)use lib次にuse-複数のパスが@INCでスタックしている場合、使用されるのは正しいパスではない可能性があります

2)require-これは、現在のスクリプトで常に正しいスクリプトが使用されていることを意味しますが、ライブラリが毎回リロードされることを意味しますか?いずれにせよ、一度使用したライブラリがロードされたままの場合、異なるバージョンからの名前空間の汚染がバグを引き起こす可能性はありますか?(たとえば、変数が定義されているかどうかに基づいてブランチがあり、あるバージョンではデフォルトであり、別のバージョンではそうではない場合、すべてのバージョンは、単に定義を解除するのではなく、明示的に定義を解除しない限り、すべてのバージョンがそうであるかのように動作しますそれを定義していませんか?)

4

1 に答える 1

1

plperl がshared_preload_librariesを介してロードされていない場合、各データベース セッションには、最初の使用時に新たに初期化された独自のインタープリターがあるため、1 つのセッションに含まれるライブラリが別のセッションに干渉する可能性はありません。

詳細については、マニュアルの PL/Perl Under the Hoodを参照してください。

于 2013-01-22T12:19:54.100 に答える