2010-08-29 16 views
12

में त्रुटियों नए सिरे से परिभाषित तो मैं एक फ़ाइल है कि संक्षेप में यह समस्या है ...सबरूटीन को संभालने के लिए कैसे पर्ल

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

use strict; 
use POSIX; 

... 

sub remove { 
    ... 
} 
... 

है और मैं एक कहावत है सबरूटीन remove नए सिरे से परिभाषित किया गया है कोई त्रुटि मिलती है मिलता है। मुझे समस्या पता है, पॉज़िक्स में remove नामक एक उपराउटिन है। हालांकि, मुझे नहीं पता कि इसे कैसे संभालना है। यह समस्या आम तौर पर हल कैसे होती है?

उत्तर

19

ऐसा करते हैं:

use POSIX(); 

जो निर्यात POSIX मॉड्यूल के सभी डिफ़ॉल्ट कार्यक्षमता बंद हो जाएगा।

POSIX::remove(filename) 
POSIX निकालने समारोह के लिए

: फिर आप इस तरह के रूप POSIX के साथ सभी POSIX तरीकों :: उपसर्ग की आवश्यकता होगी।

+0

धन्यवाद। क्या यह पारंपरिक है? – floogads

+1

हां, आम तौर पर विरोधाभासी subroutine परिभाषाओं से बचने के लिए कुछ भी आयात करने के लिए सबसे अच्छा या केवल उन subroutines आप सुनिश्चित हैं कि अद्वितीय नाम होंगे। – ennuikiller

+5

@floogads, यह कहना सामान्य बात है कि 'POSIX qw (mkfifo modf) का उपयोग करें;' जहां आप उन सभी कार्यों को स्पष्ट रूप से सूचीबद्ध करते हैं जिन्हें आप आयात करना चाहते हैं। इस तरह, आपको 'POSIX ::' उपसर्ग का उपयोग करने की आवश्यकता नहीं है, और आपको अपने कार्यक्रम में subroutine नामों के साथ संघर्ष के बारे में चिंता करने की ज़रूरत नहीं है। – cjm

22

इस चेतावनी को दबाने के लिए अन्य तरीके से एक no warnings 'redefine' ब्लॉक के अंदर अपना सबरूटीन परिभाषा डाल करने के लिए है: '! नाम'

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

आप से सामान्य रूप से निर्देश के साथ निर्यात किया जा रहा कुछ खास प्रतीक बाहर कर सकते हैं (perldoc Exporter देखें), उदाहरण:

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

use strict; 
use POSIX '!remove'; 

... 

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

मुझे 'नाम' निर्देश के बारे में पता नहीं था! साफ! –

संबंधित मुद्दे