3

変更したいモジュールを見つけました。

私の問題には、次のようないくつかの機能があります。

  • このモジュールに機能と柔軟性を追加したいと考えています。
  • 現在、このモジュールはタスクを解決しますが、Web サービスは、それが書かれたもののために、API を変更します
  • また、このモジュールのコードを使いたいです。
  • それは私のモジュールではありません
  • いくつかのバグを修正

この状況で私はどうあるべきですか?

  • このモジュールから継承し、機能を追加して CPAN にアップロードしますか?
  • 私の変更について作者に尋ねますか (そしてモジュールをリロードしますか)?
  • 他の何か?
4

2 に答える 2

8

モジュールを使用しながら変更するにはさまざまな方法がありますが、それらのほとんどについてはPerl の習得で説明しています。

  • Dave Cross が言及しているように、アップストリームに修正を送信するか、そのプロジェクトの一部になります。重要な貢献者になりたいという野心を持っているようですね。:)
  • メソッドを置き換えるサブクラスを作成する
  • サブルーチンまたはメソッドをオーバーライドまたはオーバーロードする
  • サブルーチンをラップして、入力または出力のいずれかを変更または適合させます (例: Hook::LexWrap )
  • ローカルにパッチを適用したバージョンを作成し、メイン コードとは別に保存して、アップグレードで消えないようにする

たとえば、これはアップストリームの修正を待っている間、プログラム コードで直接行うことがよくあることです。

use Some::Module;  # load the original first
BEGIN {
   package Some::Module;
   no warnings 'redefine';
   if( $VERSION > 1.23 and $VERSION < 1.45 ) {
     *broken = sub { ... fixed version ... };
     }
   }

このように、ターゲット モジュールがアップグレードされても、修正が適用されます。

于 2012-07-28T16:00:14.943 に答える
3

あなたの a と b オプションはほとんど最良のアプローチだと思います - 私はおそらくそれらを逆にするでしょう。

  1. 提案をモジュールの作成者に伝えます。モジュールのドキュメントを読んで、作成者が連絡を取りたい方法を見つけてください。電子メールのようなもの、RTのようなもの、より具体的な方法があるものがあります。作成者は、新しいコードや変更されたコードのテスト、および自由に適用できるパッチが付属している場合、提案を好む傾向があります。おそらくコードはGithubにあります。フォークして、変更を加えて、作成者にプル リクエストを送信できますか?

  2. 作成者が応答しない場合は、コードのフォークまたはサブクラス化を検討してください。この場合、人々が元のモジュールだけでなくあなたのモジュールも見つけられるようにするため、名前付けは重要です。また、あなたのバージョンと元のバージョンの違いを注意深く文書化して、人々がどちらを望むかを選択できるようにすることも必要です。

于 2012-07-28T09:04:26.793 に答える