0

動作を変更したいAPIがあります。私はもともとis_success「緑色の光」を意味する方法を作りましたが、「赤色の光」も例外ではなく、それでも光が正常に機能していることを意味します。is_success提案があった場合にのみfalseにしたいので、特定のチェック(現在は黄色と紫色のスロー例外ですが、現在は黄色と紫色のスロー例外)を補完するためにAPIにis_greenand is_red(注:ステータス「黄色」と「紫色」もあります)を追加しました。後でステータスチェックを取得する場合があります)。

動作が変化していることをコードから警告する良い方法はありますか?または変更されましたか?ユーザーが気付いている場合、これらの警告をオフにできるようにしながら?(注:変更ログにはすでに非推奨の通知があります)

4

3 に答える 3

2

Perlの字句警告カテゴリを使用できます。カテゴリがありdeprecatedます。または、パッケージ/モジュールを警告カテゴリとして登録できます。

{
    package My::Foo;
    use warnings;

    sub method {
        (@_ <= 2) or warnings::warnif('deprecated', 'invoking ->method with ... ')
    }
}

{
    package My::Bar;
    use warnings;
    use warnings::register;

    sub method {
        (@_ <= 2) or warnings::warnif('invoking ->method with ... ')
    }
}

{
    use warnings;
    My::Foo->method(1);
    My::Foo->method(1, 2);
    My::Bar->method(1, 2);
}

{
    no warnings 'deprecated';
    My::Foo->method(1, 2);
    no warnings 'My::Bar';
    My::Bar->method(1, 2);
}

警告perllexwarnを参照してください

于 2012-10-05T22:30:41.377 に答える
1

私はいつも、MIME::Headで使用されるメソッドが便利で面白いと思っていました。

このメソッドは廃止されました。完全な理由については、MIME::Parser の「decode_headers」を参照してください。絶対に使用する必要があり、警告が気に入らない場合は、FORCE を指定します。

"I_NEED_TO_FIX_THIS" 黙ってやりなさい。推奨されません。古いスクリプトの機能を維持する必要があるユーザーのみに提供されます。

"I_KNOW_WHAT_I_AM_DOING" 黙ってやりなさい。推奨されません。彼らが何をしているかを本当に知っている人のために提供されます。

アイデアは、警告が抑制されている理由を文書化する魔法の引数を提供することによってのみ、廃止予定の警告を抑制することができるということです。

于 2012-10-05T14:47:04.873 に答える
1

はい、warn コマンドを使用できます。警告が表示されますが、$SIG{' WARN '} に空のサブを指定することでトラップすることもできます。これにより、メッセージが表示されなくなります。

# warnings are thrown out with this BEGIN block in your code.
BEGIN {
  $SIG{'__WARN__'} = sub {  }
}

# prints the warning to STDOUT, if $SIG{'__WARN__'} is set to the default
warn "uh oh, this is deprecated!";

詳細と追加の例については、perdocs を参照ください

于 2012-10-05T05:15:21.537 に答える