2011-12-12 10 views
9

मैं वास्तव में इस को पता होना चाहिए, लेकिन मैं मुख्य रूप से लिनक्स के साथ काम किया है, मैक ओएस एक्स और Windows जो सभी एक निर्देशिका विभाजक के रूप में (/) का उपयोग (Windows, या तो \ या /।) ।पर्ल निर्देशिका विभाजक हैंडलिंग

इसका मतलब है कि जब मैं आमतौर पर पर्ल में प्रोग्राम लिखता हूं, तो मैं निर्देशिका विभाजक के रूप में / का उपयोग कर सकता हूं और सब कुछ ठीक है। हालांकि, मुझे पता है कि File::Spec फ़ाइल विभाजक (0 जो भी इसका मतलब है) के पोर्टेबिलिटी के लिए अनुमति देने का अनुमान है।

यदि मैं ऐसी प्रणाली पर हूं जो निर्देशिका विभाजक के रूप में आगे की स्लैश का उपयोग नहीं करता है, तो मैं समझता हूं कि उपयोगकर्ता डिफ़ॉल्ट विभाजक के साथ फ़ाइलों को इनपुट करने और डिफ़ॉल्ट विभाजक के साथ आउटपुट देखने में सक्षम होने की उम्मीद करते हैं। (उदाहरण के लिए, एक विंडोज उपयोगकर्ता इनपुट करेगा और उम्मीद करेगा कि आउटपुट C:\Users\smith\Documents और C:/Users/smith/Documents नहीं है), लेकिन पर्ल आंतरिक रूप से क्या करता है?

क्या मैं प्लेटफार्म निर्देशिका विभाजक के रूप में उपयोग करने के बावजूद, क्या मैं आंतरिक रूप से फ़ाइलों से निपटने के दौरान आगे की स्लैश का उपयोग कर सकता हूं। उदाहरण के लिए, मेरे पास एक निर्देशिका $dir है और $file नामक एक फ़ाइल है, और मैं फ़ाइल खोलना चाहता हूं। क्या मैं बस $dir/file कह सकता हूं, या क्या मुझे मेरे नाम के अनुरूप File::Spec का उपयोग करना है?

वास्तव में, पर्ल कार्यक्रमों की आवश्यकता होती है आगे निर्देशिका नाम में स्लैश करते हैं? मैं एक मॉड्यूल लिख रहा हूं, और कॉलिंग प्रोग्राम में फ़ाइल नाम वितरित कर दूंगा। क्या मुझे फ़ाइल को /foo/bar/fubar के रूप में देना चाहिए या यदि सिस्टम प्रारंभिक मैकिंटॉश ओएस जैसे कॉलन का उपयोग करता है, तो :foo:bar:fubar कहें?

+3

क्या आप रास्तों के साथ क्या कर जा रहे हैं? यदि यह फ़ाइलों को पढ़ने और लिखने के लिए है, तो '/' ठीक है, और पर्ल आपके द्वारा किए गए कार्यों का पालन करेगा। यदि आप होस्ट कंप्यूटर के कमांड शैल या उस सिस्टम के अन्य प्रोग्राम्स द्वारा पार्स किए जाने के लिए कमांड तैयार कर रहे हैं, तो आपको उस प्लेटफॉर्म के नियमों का पालन करना होगा, और फ़ाइल :: स्पेक मदद कर सकता है। –

उत्तर

7

perlport कहता है कि इस विषय के बारे में कहने के लिए लगभग हर चीज है। उस ने कहा, सिस्टम जो / को पथ विभाजक के रूप में स्वीकार नहीं कर सकते हैं दुर्लभ हैं, और हो सकता है कि आपके पास File::Spec का उपयोग ईमानदारी से हर जगह उपयोग करने से प्राप्त न हो। लेकिन निर्देशिका विभाजक के आंतरिक और बाहरी उपयोगों को अलग करने के लिए भी सावधान रहें। उदाहरण के लिए, इस विंडोज पर काम करेगा:

open my $fh, '<', 'C:/some/directory/to/some/file'; 

लेकिन यह नहीं हो सकता है, क्योंकि यह विंडोज शेल द्वारा कार्रवाई किए जाने की आवश्यकता:

system("C:/some/program.exe C:/some/program/argument.txt"); 
+0

पर्र्लपोर्ट के लिंक के लिए धन्यवाद। मैंने 'अनलिंक' और वीएमएस के बारे में कुछ सीख लिया जो कि दिलचस्प था। मेरा प्रोग्राम एक कॉलिंग प्रोग्राम में फ़ाइल/निर्देशिका नाम लौटा रहा है, इसलिए मैं बाहरी नामों के बारे में ज्यादा चिंतित नहीं हूं, लेकिन मैं विकल्प जोड़ सकता हूं। –

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