0

Storableを使用してdclone()、さまざまな複雑なオブジェクトのコピーを作成しています。これらのオブジェクトは、Log4perlロガーが接続された状態で自己ロギングします。Storableは、参照を含んでいるため、ロガーオブジェクトに遭遇すると文句を言いますCODE。コード参照をシリアル化するオプションをオンにすると、不吉な警告が表示されます

Useless use of a constant (???) in void context at (eval 1668) line 16.
Useless use of a constant (???) in void context at (eval 1668) line 10.

クローン作成プロセス中に、クローン作成されたオブジェクトのロガーが機能しなくなります。

私が複製しているオブジェクトは他のオブジェクトで構成されており、ロガーはオブジェクト、そのコンポーネント、それらのサブコンポーネントなどにアタッチされている可能性があります。

理想的には、クローン作成プロセスでロガーオブジェクトを無視するようにします。

1)このタスクに(もっと)適しているPerlモジュールはありますか?理想的には、再帰コピーを制御して、ロガーではないオブジェクトまたはデータの一部のみがコピーされるようにしたいと思います。

2)...または、オブジェクトのセルフロギング機能(sob!)をオブジェクトから取り出して、オブジェクトに接続されていないロガーを作成する方がよいでしょうか?

アドバイスや洞察をいただければ幸いです。

4

1 に答える 1

0

Storableのフックを使用してシリアル化と逆シリアル化を制御できます。私は自分でフックを使用していませんが、フックを使用する必要があります。

オブジェクトのデータを(ロギングビットなしの)単純なハッシュにコピーし、Storable::freezeそのハッシュを呼び出して、それをシリアル化された形式として返すことができる場合があります。次に、解凍​​フックで、そのプロセスを逆にして、ログ記録を配線します。少し実験すると、よりきれいなソリューションが得られるかもしれませんが、この「オブジェクトのハッシュ化されたバージョンをフリーズする」アプローチは機能するはずであり、それはあなたに出発点を与えるでしょう。

また、フックでのクローン作成を検出し、ロギングで実行する必要があることをすべて実行できます。

于 2011-03-24T02:39:37.560 に答える