13

私はいくつかのモジュールを持っており、いくつかのサブのエイリアスを作成したいと考えています。コードは次のとおりです。

#!/usr/bin/perl

package MySub;

use strict;
use warnings;

sub new {
    my $class = shift;
    my $params = shift;
    my $self = {};
    bless( $self, $class );
    return $self;
}

sub do_some {
    my $self = shift;
    print "Do something!";
    return 1;
}

*other = \&do_some;

1;

動作しますが、コンパイル警告が生成されます

名前「MySub::other」は一度だけ使用されます: /tmp/MySub.pm 行 23 でタイプミスの可能性があります。

と入力するだけでよいことはわかっていますno warnings 'once';が、これが唯一の解決策ですか? Perl が私に警告するのはなぜですか? 私は何を間違っていますか?

4

2 に答える 2

9
{
   no warnings 'once';
   *other = \&do_some;
}

また

*other = \&do_some;
*other if 0;  # Prevent spurious warning

私は後者の方が好きです。まず、無効にしたい警告のインスタンスのみを無効にします。また、一方の行を削除してもう一方の行を削除するのを忘れると、もう一方が警告を開始します。完全!

于 2013-07-09T11:41:13.467 に答える
6

もう少し入力する必要があります。

{   no warnings 'once';
    *other = \&do_some;
}

このようにして、 の影響はno warnings問題のある行だけに軽減されます。

于 2013-07-09T09:02:53.620 に答える