2013-07-09 18 views
9

Mam trochę modułu i chcę utworzyć alias dla jakiegoś sub. Oto kod:Pierwsze "... użyte tylko raz: możliwe literówki" ostrzeżenie podczas aliasingu podprogramów

#!/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; 

To działa, ale produkuje kompilacji ostrzeżenie

Name "MySub :: inny" używany tylko raz: Możliwa literówka w /tmp/MySub.pm linii 23.

Wiem, że mogę po prostu wpisać no warnings 'once';, ale czy jest to jedyne rozwiązanie? Dlaczego Perl ostrzega mnie? Co ja robię źle?

+0

co z 'sub other {do_some (@_);}' –

+0

Otrzymuję ostrzeżenie tylko wtedy, gdy próbuję wykonać moduł * bezpośrednio *, ale nie otrzymam żadnego ostrzeżenia, jeśli po prostu użyję modułu w scenariusz. – doubleDown

+0

tak, to jest rozwiązanie, ale w perldoc '* other = \ & do_some;' jest zalecane do robienia aliasów podprogramów, i zastanawiałem się kiedy dostaję to ostrzeżenie – Suic

Odpowiedz

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

lub

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

wolę drugie. Na początek wyłącza tylko wystąpienie ostrzeżenia, które chcesz wyłączyć. Ponadto, jeśli usuniesz jedną z linii i zapomnisz usunąć drugą, druga rozpocznie ostrzeganie. Idealny!

+0

działa świetnie! Dziękuję Ci. Ale zamieniłem '* inne, jeśli 0;' i '* other = \ & do_some', ponieważ ostrzeżenie wciąż tam było. Teraz jej nie ma – Suic

+0

Interesujące, dzięki. Naprawiony – ikegami

4

Należy wpisać nieco więcej:

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

ten sposób efekt no warnings jest zredukowana tylko do problematycznej linii.

Powiązane problemy