2010-08-29 24 views
12

Vì vậy, tôi có một tập tin đó trong ngắn hạn có vấn đề này ...Làm thế nào để xử lý các chương trình con xác định lại sai sót trong Perl

#!/usr/bin/perl -w 
package Foo; 

use strict; 
use POSIX; 

... 

sub remove { 
    ... 
} 
... 

và tôi nhận được một nhận được một lỗi nói rằng chương trình con remove đã được định nghĩa lại. Tôi biết vấn đề, có một chương trình con được gọi là remove trong POSIX. Tuy nhiên, tôi không biết cách xử lý nó. Vấn đề này thường được giải quyết như thế nào?

Trả lời

19

làm điều này:

use POSIX(); 

mà sẽ ngăn chặn việc xuất khẩu tất cả các chức năng mặc định của mô-đun POSIX. Sau đó, bạn sẽ cần phải thêm tiền tố tất cả các phương thức POSIX với POSIX :: chẳng hạn như:

POSIX::remove(filename) 

cho chức năng loại bỏ POSIX.

+0

Cảm ơn. Đây có phải là thông thường không? – floogads

+1

Có, nói chung để tránh xung đột định nghĩa chương trình con tốt nhất của nó để nhập khẩu không có gì hoặc chỉ những chương trình con bạn chắc chắn sẽ có tên duy nhất. – ennuikiller

+5

@floogads, thông thường hơn để nói 'sử dụng POSIX qw (mkfifo modf);' nơi bạn liệt kê rõ ràng tất cả các hàm bạn muốn nhập. Bằng cách đó, bạn không phải sử dụng tiền tố 'POSIX ::' trên tất cả, và bạn không phải lo lắng về xung đột với các tên chương trình con trong chương trình của bạn. – cjm

22

Một cách khác để ngăn chặn cảnh báo này là để đặt định nghĩa lại chương trình con của bạn bên trong một khối no warnings 'redefine':

{ 
    no warnings 'redefine'; 
    sub remove { ... } 
} 
18

Bạn có thể loại trừ những biểu tượng nào đó thì việc thường xuất khẩu với '! Tên' chỉ thị (xem perldoc Exporter), ví dụ:

#!/usr/bin/perl -w 
package Foo; 

use strict; 
use POSIX '!remove'; 

... 

sub remove { 
    ... 
} 
... 
+1

Tôi không biết về chỉ thị '! Name'! Khéo léo! –

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