2013-07-09 12 views
9

Tôi có một số mô-đun và muốn tạo bí danh cho một số phụ. Đây là mã:Nhận thông báo "... chỉ được sử dụng một lần: có thể có lỗi đánh máy" khi các trình con đặt bí danh

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

Nó hoạt động, nhưng nó tạo ra một biên dịch cảnh báo

Name "MySub :: khác" được sử dụng một lần duy nhất: có thể typo ở /tmp/MySub.pm dòng 23.

Tôi biết rằng tôi chỉ có thể nhập no warnings 'once';, nhưng đây có phải là giải pháp duy nhất không? Tại sao Perl lại cảnh báo tôi? Tôi đang làm gì sai?

+0

điều gì về 'phụ khác {do_some (@_);}' –

+0

Tôi chỉ nhận được cảnh báo nếu tôi cố gắng thực hiện mô-đun * trực tiếp *, nhưng tôi không nhận được bất kỳ cảnh báo nào nếu tôi chỉ sử dụng mô-đun trong kịch bản. – doubleDown

+0

có, đây là giải pháp, nhưng trong perldoc '* other = \ & do_some;' được khuyến khích để tạo bí danh chương trình con, và tôi đã tự hỏi khi nhận được cảnh báo này – Suic

Trả lời

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

hoặc

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

tôi thích sau này. Để bắt đầu, nó sẽ chỉ vô hiệu hóa cá thể của cảnh báo bạn muốn vô hiệu hóa. Ngoài ra, nếu bạn xóa một trong các dòng và quên xóa một dòng khác, dòng còn lại sẽ bắt đầu cảnh báo. Hoàn hảo!

+0

hoạt động tuyệt vời! Cảm ơn bạn. Nhưng tôi đã thay đổi '* khác nếu 0;' và '* other = \ & do_some', bởi vì cảnh báo vẫn còn đó. Bây giờ nó đã biến mất – Suic

+0

Thú vị, cảm ơn. đã sửa – ikegami

4

Bạn nên gõ thêm một chút:

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

Bằng cách này, ảnh hưởng của no warnings giảm chỉ vào dòng có vấn đề.

Các vấn đề liên quan