यह कमांड पर्लपोर्ट है जिसे हमारे कई मुफ्त ऑनलाइन वर्कस्टेशन जैसे कि उबंटू ऑनलाइन, फेडोरा ऑनलाइन, विंडोज ऑनलाइन एमुलेटर या मैक ओएस ऑनलाइन एमुलेटर का उपयोग करके ऑनवर्क्स फ्री होस्टिंग प्रदाता में चलाया जा सकता है।
कार्यक्रम:
नाम
पर्लपोर्ट - पोर्टेबल पर्ल लिखना
वर्णन
पर्ल कई ऑपरेटिंग सिस्टम पर चलता है। जबकि उनमें से अधिकांश में बहुत कुछ समान है, वे
उनकी अपनी अनूठी विशेषताएं भी हैं।
यह दस्तावेज़ आपको यह पता लगाने में मदद करने के लिए है कि पोर्टेबल पर्ल कोड क्या होता है। वह
एक बार जब आप पोर्टेबल तरीके से लिखने का निर्णय ले लेते हैं, तो आपको पता चल जाता है कि रेखाएँ कहाँ खींची गई हैं, और
आप उनके भीतर रह सकते हैं.
एक विशेष प्रकार के कंप्यूटर का पूरा लाभ उठाने और के बीच एक समझौता है
उनकी पूरी श्रृंखला का लाभ उठा रहे हैं। स्वाभाविक रूप से, जैसे-जैसे आप अपना दायरा बढ़ाते हैं और बनते जाते हैं
अधिक विविधता होने पर, सामान्य कारक कम हो जाते हैं, और आपके पास उत्तरोत्तर छोटा क्षेत्र रह जाता है
सामान्य आधार जिसमें आप किसी विशेष कार्य को पूरा करने के लिए कार्य कर सकते हैं। इस प्रकार, जब आप
किसी समस्या पर हमला शुरू करते समय, यह विचार करना महत्वपूर्ण है कि ट्रेडऑफ़ के किस भाग के अंतर्गत
वक्र जिसे आप संचालित करना चाहते हैं। विशेष रूप से, आपको यह तय करना होगा कि क्या यह महत्वपूर्ण है
जिस कार्य को आप कोडिंग कर रहे हैं उसमें पोर्टेबल होने की पूरी व्यापकता है, या बस प्राप्त करना है या नहीं
अभी काम पूरा हो गया है. यह सबसे कठिन चुनाव है। बाकी सब आसान है, क्योंकि
पर्ल कई विकल्प प्रदान करता है, आप जिस भी तरीके से अपनी समस्या का समाधान करना चाहें।
इसे दूसरे तरीके से देखें, तो पोर्टेबल कोड लिखना आम तौर पर जानबूझकर अपने को सीमित करने के बारे में है
उपलब्ध विकल्प. स्वाभाविक रूप से, ऐसा करने के लिए अनुशासन और बलिदान की आवश्यकता होती है। उत्पाद
पोर्टेबिलिटी और सुविधा स्थिर हो सकती है। आपको चेतावनी दी गई है।
दो महत्वपूर्ण बिंदुओं से अवगत रहें:
सभी पर्ल प्रोग्रामों का पोर्टेबल होना आवश्यक नहीं है
ऐसा कोई कारण नहीं है कि आपको यूनिक्स उपकरणों को एक साथ जोड़ने के लिए पर्ल को एक भाषा के रूप में उपयोग नहीं करना चाहिए,
या मैकिंटोश एप्लिकेशन को प्रोटोटाइप करने के लिए, या विंडोज रजिस्ट्री को प्रबंधित करने के लिए। अगर यह
किसी दिए गए कार्यक्रम में एक या दूसरे कारण से पोर्टेबिलिटी का लक्ष्य रखने का कोई मतलब नहीं है,
तो फिर परेशान मत होइए.
लगभग सभी पर्ल पहले से ही is पोर्टेबल
यह सोचकर मूर्ख मत बनो कि पोर्टेबल पर्ल कोड बनाना कठिन है। ऐसा नहीं है.
पर्ल अलग-अलग उपलब्ध चीज़ों के बीच के अंतर को पाटने की पूरी कोशिश करता है
प्लेटफ़ॉर्म, और उन सुविधाओं का उपयोग करने के लिए उपलब्ध सभी साधन। इस प्रकार लगभग सभी पर्ल
कोड किसी भी मशीन पर बिना संशोधन के चलता है। लेकिन कुछ महत्वपूर्ण मुद्दे हैं
पोर्टेबल कोड लिखने में, और यह दस्तावेज़ पूरी तरह से उन मुद्दों के बारे में है।
यहां सामान्य नियम है: जब आप किसी कार्य को आमतौर पर पूरी श्रृंखला का उपयोग करके करते हैं
प्लेटफ़ॉर्म, पोर्टेबल कोड लिखने के बारे में सोचें। इस तरह, आप ज्यादा त्याग नहीं करते
कार्यान्वयन विकल्पों में से आप स्वयं लाभ उठा सकते हैं, और साथ ही आप दे भी सकते हैं
आपके उपयोगकर्ताओं के पास बहुत सारे प्लेटफ़ॉर्म विकल्प हैं। वहीं दूसरी ओर जब आपको फायदा उठाना हो
किसी विशेष प्लेटफ़ॉर्म की कुछ अनूठी विशेषता, जैसा कि अक्सर सिस्टम के मामले में होता है
प्रोग्रामिंग (चाहे यूनिक्स, विंडोज, वीएमएस, आदि के लिए), प्लेटफ़ॉर्म-विशिष्ट लेखन पर विचार करें
कोड।
जब कोड केवल दो या तीन ऑपरेटिंग सिस्टम पर चलेगा, तो आपको विचार करने की आवश्यकता हो सकती है
केवल उन विशेष प्रणालियों का अंतर। महत्वपूर्ण बात यह तय करना है कि कहां
कोड चलेगा और आपके निर्णय में विचार-विमर्श किया जाएगा।
नीचे दी गई सामग्री को तीन मुख्य खंडों में विभाजित किया गया है: पोर्टेबिलिटी के मुख्य मुद्दे
("मुद्दे"), प्लेटफ़ॉर्म-विशिष्ट मुद्दे ("प्लेटफ़ॉर्म"), और अंतर्निहित पर्ल फ़ंक्शन
विभिन्न बंदरगाहों पर अलग-अलग व्यवहार करें ("फ़ंक्शन कार्यान्वयन")।
इस जानकारी को पूर्ण नहीं माना जाना चाहिए; इसमें संभवतः क्षणिक भी शामिल है
कुछ बंदरगाहों की विशिष्टताओं के बारे में जानकारी, जिनमें से लगभग सभी अच्छी स्थिति में हैं
निरंतर विकास का. इस प्रकार, इस सामग्री को एक सतत कार्य माना जाना चाहिए
प्रगति (" ").
मुद्दें
नई-पंक्तियों
अधिकांश ऑपरेटिंग सिस्टम में, फाइलों में लाइनें न्यूलाइन्स द्वारा समाप्त की जाती हैं। बस वही उपयोग किया जाता है
क्योंकि एक नई लाइन ओएस से ओएस में भिन्न हो सकती है। यूनिक्स परंपरागत रूप से "\012", एक प्रकार का डॉशिश का उपयोग करता है
I/O "\015\012" का उपयोग करता है, Mac OS "\015" का उपयोग करता है, और z/OS "\025" का उपयोग करता है।
पर्ल "तार्किक" न्यूलाइन का प्रतिनिधित्व करने के लिए "\n" का उपयोग करता है, जहां तार्किक क्या है, इस पर निर्भर हो सकता है
उपयोग में प्लेटफार्म. MacPerl में, "\n" का अर्थ हमेशा "\015" होता है। EBCDIC प्लेटफ़ॉर्म पर, "\n" हो सकता है
"\025" या "\045" हो। डॉशिश पर्ल्स में, "\n" का अर्थ आमतौर पर "\012" होता है, लेकिन a तक पहुंचते समय
फ़ाइल को "टेक्स्ट" मोड में, पर्ल ": crlf" परत का उपयोग करता है जो इसे (या से) में अनुवादित करता है
"\015\012", यह इस पर निर्भर करता है कि आप पढ़ रहे हैं या लिख रहे हैं। यूनिक्स भी यही काम करता है
ttys विहित मोड में। "\015\012" को आमतौर पर सीआरएलएफ के रूप में जाना जाता है।
टेक्स्ट पंक्तियों से पिछली नई पंक्तियों को ट्रिम करने के लिए "chomp()" का उपयोग करें। डिफ़ॉल्ट सेटिंग्स के साथ
फ़ंक्शन अनुगामी "\n" वर्ण की तलाश करता है और इस प्रकार पोर्टेबल तरीके से ट्रिम करता है।
बाइनरी फ़ाइलों (या बाइनरी मोड में टेक्स्ट फ़ाइलों) से निपटते समय स्पष्ट रूप से $/ सेट करना सुनिश्चित करें
"chomp()" का उपयोग करने से पहले आपके फ़ाइल स्वरूप के लिए उचित मान।
"टेक्स्ट" मोड अनुवाद के कारण, डॉशिश पर्ल्स के पास "सीक" और का उपयोग करने की सीमाएँ हैं
"टेक्स्ट" मोड में एक्सेस की गई फ़ाइल पर "बताएं"। उन स्थानों पर "खोज" करते रहें जहां से आपको मिला है
"बताएं" (और कोई अन्य नहीं), और आप आमतौर पर "पाठ" में भी "खोज" और "बताएं" का उपयोग करने के लिए स्वतंत्र हैं
तरीका। "खोजें" या "बताएं" या अन्य फ़ाइल संचालन का उपयोग करना गैर-पोर्टेबल हो सकता है। यदि तुम प्रयोग करते हो
किसी फ़ाइल पर "बिनमोड", हालाँकि, आप आम तौर पर मनमाने मूल्यों के साथ "खोज" और "बता" सकते हैं
सुरक्षित रूप से।
सॉकेट प्रोग्रामिंग में एक आम ग़लतफ़हमी यह है कि हर जगह "\n eq \012"। उपयोग करते समय
सामान्य इंटरनेट प्रोटोकॉल, "\012" और "\015" जैसे प्रोटोकॉल की आवश्यकता होती है
विशेष रूप से, और तार्किक "\n" और "\r" (गाड़ी वापसी) के मान नहीं हैं
विश्वसनीय.
सॉकेट प्रिंट करें "नमस्ते, ग्राहक!\r\n"; # गलत
सॉकेट प्रिंट करें "हाय, ग्राहक!\015\012"; # सही
हालाँकि, "\015\012" (या "\cM\cJ", या "\x0D\x0A") का उपयोग करना थकाऊ और भद्दा हो सकता है, क्योंकि
साथ ही कोड बनाए रखने वालों को भ्रमित करना। जैसे, "सॉकेट" मॉड्यूल आपूर्ति करता है
उन लोगों के लिए सही चीज़ जो इसे चाहते हैं।
सॉकेट qw(:DEFAULT :crlf) का उपयोग करें;
सॉकेट प्रिंट करें "नमस्ते, ग्राहक!$CRLF" # सही
सॉकेट से पढ़ते समय, याद रखें कि डिफ़ॉल्ट इनपुट रिकॉर्ड विभाजक $/ "\n" है,
लेकिन मजबूत सॉकेट कोड पंक्ति के अंत के रूप में या तो "\012" या "\015\012" के रूप में पहचाना जाएगा:
जबकि ( ) { # उचित नहीं!
#...
}
क्योंकि सीआरएलएफ और एलएफ दोनों एलएफ में समाप्त होते हैं, इनपुट रिकॉर्ड विभाजक को एलएफ और किसी भी सीआर पर सेट किया जा सकता है
बाद में उतार दिया गया. लिखना बेहतर है:
सॉकेट qw(:DEFAULT :crlf) का उपयोग करें;
स्थानीय($/) = एलएफ; यदि $/ पहले से ही \012 है तो # की आवश्यकता नहीं है
जबकि ( ) {
s/$CR?$LF/\n/; # निश्चित नहीं कि सॉकेट एलएफ या सीआरएलएफ का उपयोग करता है या नहीं, ठीक है
# s/\015?\012/\n/; # एक ही बात
}
इस उदाहरण को पिछले उदाहरण की तुलना में अधिक पसंद किया जाता है--यहां तक कि यूनिक्स प्लेटफ़ॉर्म के लिए भी--क्योंकि अब कोई भी
"\015" ("\cM"'s) को हटा दिया गया (और बहुत खुशी मनाई गई)।
इसी तरह, ऐसे फ़ंक्शन जो टेक्स्ट डेटा लौटाते हैं - जैसे कि एक फ़ंक्शन जो वेब लाता है
पृष्ठ--कभी-कभी डेटा वापस करने से पहले नई पंक्तियों का अनुवाद करना चाहिए, यदि उन्होंने अभी तक ऐसा नहीं किया है
स्थानीय न्यूलाइन प्रतिनिधित्व में अनुवादित किया गया। कोड की एक ही पंक्ति अक्सर होगी
पर्याप्त:
$डेटा =~ s/\015?\012/\n/g;
$ डेटा लौटाएं;
इसमें से कुछ भ्रामक हो सकते हैं. यहां ASCII CR और LF का एक आसान संदर्भ दिया गया है
पात्र। आप इसे प्रिंट करके अपने बटुए में रख सकते हैं।
LF eq \012 eq \x0A eq \cJ eq chr(10) eq ASCII 10
CR eq \015 eq \x0D eq \cM eq chr(13) eq ASCII 13
| यूनिक्स | डॉस | मैक |
---------------------------
\n | एलएफ | एलएफ | सीआर |
\r | सीआर | सीआर | एलएफ |
\n * | एलएफ | सीआरएलएफ | सीआर |
\r * | सीआर | सीआर | एलएफ |
---------------------------
* टेक्स्ट-मोड STDIO
यूनिक्स कॉलम मानता है कि आप कैनोनिकल में एक सीरियल लाइन (टीटीआई की तरह) तक नहीं पहुंच रहे हैं
तरीका। यदि आप हैं, तो इनपुट पर सीआर "\n" बन जाता है, और आउटपुट पर "\n" सीआरएलएफ बन जाता है।
ये पर्ल में "\n" और "\r" की सबसे सामान्य परिभाषाएँ हैं। हो भी सकता है
अन्य। उदाहरण के लिए, EBCDIC कार्यान्वयन पर जैसे कि z/OS (OS/390) या OS/400 (का उपयोग करके)
ILE, PASE ASCII-आधारित है) उपरोक्त सामग्री "यूनिक्स" के समान है लेकिन कोड
संख्याएँ बदलती हैं:
एलएफ eq \025 eq \x15 eq \cU eq chr(21) eq CP-1047 21
एलएफ़ इक़ \045 इक़ \x25 इक़ chr(37) eq CP-0037 37
CR eq \015 eq \x0D eq \cM eq chr(13) eq CP-1047 13
CR eq \015 eq \x0D eq \cM eq chr(13) eq CP-0037 13
| z/ओएस | ओएस/400 |
----------------------
\n | एलएफ | एलएफ |
\r | सीआर | सीआर |
\n * | एलएफ | एलएफ |
\r * | सीआर | सीआर |
----------------------
* टेक्स्ट-मोड STDIO
नंबर endianness और चौड़ाई
अलग-अलग सीपीयू पूर्णांक और फ़्लोटिंग पॉइंट नंबरों को अलग-अलग क्रम में संग्रहीत करते हैं (जिन्हें कहा जाता है)।
endianness) और चौड़ाई (32-बिट और 64-बिट आज सबसे आम हैं)। इसका असर आप पर पड़ता है
प्रोग्राम जब वे एक सीपीयू आर्किटेक्चर से बाइनरी प्रारूप में संख्याओं को स्थानांतरित करने का प्रयास करते हैं
दूसरे के लिए, आमतौर पर या तो नेटवर्क कनेक्शन के माध्यम से "लाइव", या संख्याओं को संग्रहीत करके
द्वितीयक भंडारण जैसे डिस्क फ़ाइल या टेप।
परस्पर विरोधी भंडारण आदेश संख्याओं को पूरी तरह से गड़बड़ कर देते हैं। यदि एक छोटा-सा मेज़बान
(इंटेल, वैक्स) स्टोर 0x12345678 (दशमलव में 305419896), एक बड़ा-एंडियन होस्ट (मोटोरोला, स्पार्क,
पीए) इसे 0x78563412 (दशमलव में 2018915346) के रूप में पढ़ता है। अल्फ़ा और एमआईपीएस या तो हो सकते हैं:
डिजिटल/कॉम्पैक ने उन्हें लिटिल-एंडियन मोड में उपयोग किया/उपयोग किया; एसजीआई/क्रे इन्हें बिग-एंडियन में उपयोग करता है
तरीका। नेटवर्क (सॉकेट) कनेक्शन में इस समस्या से बचने के लिए "पैक" और "अनपैक" का उपयोग करें
प्रारूप "एन" और "एन", "नेटवर्क" ऑर्डर। इनके पोर्टेबल होने की गारंटी है।
पर्ल 5.10.0 के अनुसार, आप बड़े या छोटे को बाध्य करने के लिए ">" और "<" संशोधक का भी उपयोग कर सकते हैं।
एंडियन बाइट-ऑर्डर। यदि आप हस्ताक्षरित पूर्णांक या 64-बिट संग्रहीत करना चाहते हैं तो यह उपयोगी है
उदाहरण के लिए, पूर्णांक।
आप पैक की गई डेटा संरचना को खोलकर अपने प्लेटफ़ॉर्म की अंतहीनता का पता लगा सकते हैं
मूल प्रारूप जैसे:
प्रिंट अनपैक("h*", पैक("s2", 1, 2)), "\n";
# '10002000' उदाहरण के लिए इंटेल x86 या अल्फा 21064 लिटिल-एंडियन मोड में
# '00100020' उदाहरण के लिए मोटोरोला 68040
यदि आपको एंडियन आर्किटेक्चर के बीच अंतर करने की आवश्यकता है तो आप इनमें से किसी एक का उपयोग कर सकते हैं
वैरिएबल इस प्रकार सेट किए गए हैं:
$is_big_endian = अनपैक("h*", पैक("s", 1)) =~ /01/;
$is_little_endian = अनपैक("h*", पैक("s", 1)) =~ /^1/;
अलग-अलग चौड़ाई समान अंतहीनता वाले प्लेटफार्मों के बीच भी कटाव का कारण बन सकती है।
छोटी चौड़ाई वाला प्लेटफ़ॉर्म संख्या के ऊपरी हिस्सों को खो देता है। कोई अच्छा समाधान नहीं है
इस समस्या के लिए, कच्चे बाइनरी नंबरों को स्थानांतरित करने या संग्रहीत करने से बचने के अलावा।
इन दोनों समस्याओं से दो तरह से निपटा जा सकता है। या तो नंबर ट्रांसफर करें और स्टोर करें
रॉ बाइनरी के बजाय हमेशा टेक्स्ट फॉर्मेट में, अन्यथा जैसे मॉड्यूल का उपयोग करने पर विचार करें
"डेटा::डम्पर" और "स्टोरेबल" (पर्ल 5.8 के अनुसार शामिल)। सभी डेटा को टेक्स्ट के रूप में रखना
मामलों को महत्वपूर्ण रूप से सरल बनाता है।
वी-स्ट्रिंग्स केवल v2147483647 (0x7एफएफएफ_एफएफएफएफ) तक पोर्टेबल हैं, यह ईबीसीडीआईसी कितनी दूर है, या
अधिक सटीक रूप से यूटीएफ-ईबीसीडीआईसी जाएगा।
फ़ाइलें और फ़ाइल सिस्टम
आजकल अधिकांश प्लेटफ़ॉर्म फ़ाइलों को पदानुक्रमित तरीके से संरचित करते हैं। तो, यह उचित है
यह मान लेना सुरक्षित है कि सभी प्लेटफ़ॉर्म विशिष्ट रूप से पहचान करने के लिए "पथ" की धारणा का समर्थन करते हैं
सिस्टम पर फ़ाइल. हालाँकि, वह पथ वास्तव में कैसे लिखा गया है, इसमें काफी भिन्नता है।
यद्यपि समान, फ़ाइल पथ विनिर्देश यूनिक्स, विंडोज़, मैक ओएस, ओएस/2 के बीच भिन्न हैं।
वीएमएस, वीओएस, आरआईएससी ओएस, और शायद अन्य। उदाहरण के लिए, यूनिक्स उन कुछ OSes में से एक है
एकल रूट निर्देशिका का सुंदर विचार है।
DOS, OS/2, VMS, VOS और Windows पथ विभाजक के रूप में "/" के साथ यूनिक्स के समान कार्य कर सकते हैं, या
अपने स्वयं के विशिष्ट तरीकों से (जैसे कि कई रूट निर्देशिकाएं और विभिन्न
"अनरूटेड" डिवाइस फ़ाइलें जैसे NIL: और LPT:)।
Mac OS 9 और इससे पहले "/" के बजाय पथ विभाजक के रूप में ":" का उपयोग किया गया था।
फ़ाइल सिस्टम न तो हार्ड लिंक ("लिंक") और न ही प्रतीकात्मक लिंक ("सिम्लिंक") का समर्थन कर सकता है।
"रीडलिंक", "एलस्टैट")।
फ़ाइल सिस्टम न तो एक्सेस टाइमस्टैम्प का समर्थन कर सकता है और न ही टाइमस्टैम्प को बदलने का (मतलब कि
एकमात्र पोर्टेबल टाइमस्टैम्प के बारे में संशोधन टाइमस्टैम्प है), या एक सेकंड
किसी भी टाइमस्टैम्प की ग्रैन्युलैरिटी (उदाहरण के लिए FAT फ़ाइल सिस्टम समय ग्रैन्युलैरिटी को दो तक सीमित करता है
सेकंड)।
"इनोड परिवर्तन टाइमस्टैम्प" ("-सी" फ़ाइलटेस्ट) वास्तव में "निर्माण टाइमस्टैम्प" हो सकता है
(जो यूनिक्स में नहीं है)।
VOS पर्ल पथ विभाजक के रूप में "/" के साथ यूनिक्स फ़ाइल नाम का अनुकरण कर सकता है। मूल पथनाम
इससे बड़ा, इससे कम, संख्या-चिह्न और प्रतिशत-चिह्न हमेशा स्वीकार किए जाते हैं।
आरआईएससी ओएस पर्ल पथ विभाजक के रूप में "/" के साथ यूनिक्स फ़ाइल नामों का अनुकरण कर सकता है, या मूल जा सकता है और उपयोग कर सकता है
"।" पथ विभाजक के लिए और फ़ाइल सिस्टम और डिस्क नामों को संकेत देने के लिए ":"।
यूनिक्स फ़ाइल सिस्टम एक्सेस सेमेन्टिक्स को न मानें: पढ़ना, लिखना और निष्पादित करना सभी हैं
अनुमतियाँ हैं, और यदि वे मौजूद भी हैं, तो उनके शब्दार्थ (उदाहरण के लिए क्या करते हैं)।
"r", "w", और "x" का मतलब निर्देशिका पर है) यूनिक्स हैं। विभिन्न यूनिक्स/POSIX
संगतता परतें आमतौर पर "chmod()" जैसे इंटरफ़ेस को काम में लाने का प्रयास करती हैं, लेकिन कभी-कभी
वहाँ कोई अच्छी मैपिंग ही नहीं है।
यदि यह सब डराने वाला है, तो कोई (ठीक है, शायद थोड़ा ही) डरें। मॉड्यूल हैं
वह मदद कर सकता है. "फ़ाइल::स्पेक" मॉड्यूल किसी भी चीज़ पर सही काम करने के तरीके प्रदान करता है
प्लेटफ़ॉर्म प्रोग्राम चला रहा होता है।
File::Spec::Functions का उपयोग करें;
chdir(updir()); # एक निर्देशिका ऊपर जाएं
मेरी $फ़ाइल = catfile(curdir(), 'temp', 'file.txt');
# यूनिक्स और Win32 पर, './temp/file.txt'
# मैक ओएस क्लासिक पर, ':temp:file.txt'
# वीएमएस पर, '[.temp]file.txt'
"फ़ाइल::स्पेक" संस्करण 5.004_05 से मानक वितरण में उपलब्ध है।
"File::Spec::Functions" केवल "File::Spec" 0.7 और बाद के संस्करण और पर्ल के कुछ संस्करणों में है
संस्करण 0.6 के साथ आएं। यदि "फ़ाइल::स्पेक" को 0.7 या उसके बाद अद्यतन नहीं किया गया है, तो आपको इसका उपयोग करना होगा
"फ़ाइल::स्पेक" से ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस (या "फ़ाइल::स्पेक" को अपग्रेड करें)।
सामान्य तौर पर, उत्पादन कोड में फ़ाइल पथ हार्डकोडेड नहीं होने चाहिए। उन्हें उपयोगकर्ता बनाना-
फ़ाइल पथ को ध्यान में रखते हुए, कॉन्फ़िगरेशन फ़ाइल से आपूर्ति या पढ़ना बेहतर है
विभिन्न मशीनों पर सिंटैक्स भिन्न होता है।
यह मेकफ़ाइल्स और टेस्ट सुइट्स जैसी स्क्रिप्ट में विशेष रूप से ध्यान देने योग्य है, जो अक्सर
उपनिर्देशिकाओं के लिए पथ विभाजक के रूप में "/" मान लें।
मानक वितरण से "फ़ाइल::बेसनाम" भी उपयोगी है, जो पथनाम को विभाजित करता है
टुकड़ों में (आधार फ़ाइल नाम, निर्देशिका का पूरा पथ और फ़ाइल प्रत्यय)।
यहां तक कि जब आप एक ही प्लेटफॉर्म पर हों (यदि आप यूनिक्स को एक सिंगल प्लेटफॉर्म कह सकते हैं), तो याद रखें कि ऐसा न करें
विशेष सिस्टम-विशिष्ट फ़ाइलों या निर्देशिकाओं के अस्तित्व या सामग्री पर भरोसा करें,
पसंद / Etc / पासवर्ड, /etc/sendmail.conf, / Etc / resolv.conf, या और भी / Tmp /। उदाहरण के लिए,
/ Etc / पासवर्ड मौजूद हो सकता है लेकिन एन्क्रिप्टेड पासवर्ड नहीं हो सकता, क्योंकि सिस्टम इसका उपयोग कर रहा है
किसी प्रकार की बढ़ी हुई सुरक्षा। या इसमें सभी खाते शामिल नहीं हो सकते, क्योंकि
सिस्टम एनआईएस का उपयोग कर रहा है. यदि कोड को ऐसी फ़ाइल पर भरोसा करने की आवश्यकता है, तो इसका विवरण शामिल करें
कोड के दस्तावेज़ में फ़ाइल और उसका प्रारूप, फिर उपयोगकर्ता के लिए इसे आसान बनाएं
फ़ाइल के डिफ़ॉल्ट स्थान को ओवरराइड करें।
यह न मानें कि एक टेक्स्ट फ़ाइल एक नई पंक्ति के साथ समाप्त होगी। उन्हें ऐसा करना चाहिए, लेकिन लोग भूल जाते हैं।
अलग-अलग केस वाली एक ही नाम की दो फ़ाइलें या निर्देशिकाएं न रखें, जैसे परीक्षण.pl
और Test.pl, क्योंकि कई प्लेटफार्मों में केस-असंवेदनशील (या कम से कम केस-क्षमाशील) होता है
फ़ाइलनाम. साथ ही, कोशिश करें कि नामों में गैर-शब्द वर्ण ('' को छोड़कर'') न हों, और
अधिकतम पोर्टेबिलिटी के लिए उन्हें 8.3 सम्मेलन में रखें, हालांकि यह एक बोझ हो सकता है
दिखाई देते हैं।
इसी तरह, "ऑटोस्प्लिट" मॉड्यूल का उपयोग करते समय, अपने कार्यों को 8.3 नामकरण पर रखने का प्रयास करें
केस-असंवेदनशील परंपराएँ; या, कम से कम, इसे ऐसा बनाएं कि परिणामी फ़ाइलों में एक हो
अद्वितीय (केस-असंवेदनशील) पहले 8 अक्षर।
फ़ाइल नामों में व्हाइटस्पेस अधिकांश सिस्टमों पर सहन किया जाता है, लेकिन सभी पर नहीं, यहां तक कि सिस्टम पर भी
जहां इसे सहन किया जा सकता है, कुछ उपयोगिताएं ऐसे रिक्त स्थान से भ्रमित हो सकती हैं।
कई सिस्टम (DOS, VMS ODS-2) में एक से अधिक "" नहीं हो सकते। उनके फ़ाइल नाम में.
यह न मानें कि ">" फ़ाइल नाम का पहला अक्षर नहीं होगा। इसके लिए हमेशा "<" का स्पष्ट रूप से उपयोग करें
पढ़ने के लिए एक फ़ाइल खोलें, या इससे भी बेहतर, "ओपन" के तीन-आर्ग संस्करण का उपयोग करें, जब तक कि आप
चाहते हैं कि उपयोगकर्ता एक पाइप खोलने को निर्दिष्ट करने में सक्षम हो।
मेरा $fh, '<', $मौजूदा_फ़ाइल) खोलें या $!;
यदि फ़ाइल नाम में अजीब वर्णों का उपयोग हो सकता है, तो इसके बजाय इसे "sysopen" से खोलना सबसे सुरक्षित है
"खुला" का. "खुला" जादू है और ">", "<", और "|" जैसे वर्णों का अनुवाद कर सकता है, जो हो सकता है
गलत काम करना. (कभी-कभी, हालांकि, यह सही बात है।) थ्री-आर्ग ओपन कैन
ऐसे मामलों में जहां यह अवांछनीय है, इस अनुवाद से बचाने में भी मदद मिलेगी।
फ़ाइल नाम के भाग के रूप में ":" का उपयोग न करें क्योंकि कई प्रणालियाँ अपने स्वयं के शब्दार्थ के लिए इसका उपयोग करती हैं
(पथनाम घटकों, कई नेटवर्किंग योजनाओं और उपयोगिताओं को अलग करने के लिए मैक ओएस क्लासिक
नोडनाम और पथनाम को अलग करने के लिए, इत्यादि)। उन्हीं कारणों से बचें
"@", ";" और "|"।
यह न मानें कि पथनामों में आप दो प्रमुख स्लैश "//" को एक में संक्षिप्त कर सकते हैं: कुछ
नेटवर्किंग और क्लस्टरिंग फ़ाइल सिस्टम के लिए विशेष शब्दार्थ हैं। परिचालन करने दीजिए
सिस्टम इसे सुलझा ले.
RSI पोर्टेबल फ़ाइल का नाम अक्षर जैसा कि एएनएसआई सी द्वारा परिभाषित किया गया है
abcdefghijklmnopqrtuv wxyz
ABCDEFGHIJKLMNOPQRTUV WXYZ
0 1 2 3 4 एक्सएक्सएक्स 5 6 7 8
. _ -
और "-" पहला अक्षर नहीं होना चाहिए। यदि आप हाइपरकरेक्ट होना चाहते हैं, तो मामले पर बने रहें-
असंवेदनशील और 8.3 नामकरण परंपरा के भीतर (सभी फ़ाइलें और निर्देशिकाएँ होनी चाहिए
एक निर्देशिका में अद्वितीय यदि उनके नाम छोटे कर दिए जाएं और आठ कर दिए जाएं
"।" से पहले अक्षर, यदि कोई हो, और "।" के बाद तीन अक्षर, यदि कोई हो)। (और
निर्देशिका नामों में "।" का प्रयोग न करें।)
प्रणाली इंटरेक्शन
सभी प्लेटफ़ॉर्म कमांड लाइन प्रदान नहीं करते हैं. ये आमतौर पर ऐसे प्लेटफ़ॉर्म हैं जो मुख्य रूप से भरोसा करते हैं
यूजर इंटरेक्शन के लिए ग्राफिकल यूजर इंटरफेस (जीयूआई) पर। एक प्रोग्राम जिसके लिए कमांड की आवश्यकता होती है
लाइन इंटरफ़ेस हर जगह काम नहीं कर सकता है। यह संभवतः प्रोग्राम के उपयोगकर्ता के लिए है
निपटें, इसलिए इसके बारे में चिंता करते हुए देर तक न जागें।
कुछ प्लेटफ़ॉर्म सिस्टम द्वारा खुली रखी गई फ़ाइलों को हटा या नाम नहीं बदल सकते, यह सीमा हो सकती है
फ़ाइल अनुमतियाँ या स्वामी जैसी फ़ाइल सिस्टम जानकारी बदलने पर भी लागू होता है।
जब आप फ़ाइलों का काम पूरा कर लें तो उन्हें "बंद" करना याद रखें। किसी खुले को "अनलिंक" या "नाम बदलें" न करें
फ़ाइल। पहले से बंधी या खुली हुई फ़ाइल को "बाँधें" या "खोलें" न; पहले इसे "खोलें" या "बंद करें"।
कुछ ऑपरेटिंग सिस्टम की तरह, लिखने के लिए एक ही फ़ाइल को एक समय में एक से अधिक बार न खोलें
ऐसी फाइलों पर अनिवार्य ताले लगाएं।
यह न मानें कि किसी निर्देशिका पर लिखने/संशोधित करने की अनुमति जोड़ने या हटाने का अधिकार देती है
उस निर्देशिका में फ़ाइलें/निर्देशिकाएँ। वह फ़ाइल सिस्टम विशिष्ट है: कुछ फ़ाइल सिस्टम में आप
फ़ाइल/निर्देशिका में भी (या केवल) लिखने/संशोधित करने की अनुमति की आवश्यकता है। कुछ में
फ़ाइल सिस्टम (एएफएस, डीएफएस) में निर्देशिका प्रविष्टियों को जोड़ने/हटाने की अनुमति पूरी तरह से है
अलग अनुमति.
यह न मानें कि एक "अनलिंक" पूरी तरह से फ़ाइल से छुटकारा दिला देता है: कुछ फ़ाइल सिस्टम
(विशेष रूप से वीएमएस वाले) में संस्करणित फ़ाइल सिस्टम हैं, और "अनलिंक ()" केवल हटाता है
सबसे नवीनतम संस्करण (यह सभी संस्करणों को नहीं हटाता क्योंकि डिफ़ॉल्ट रूप से मूल उपकरण चालू रहते हैं
वे प्लेटफ़ॉर्म नवीनतम संस्करण को भी हटा देते हैं)। हटाने योग्य पोर्टेबल मुहावरा
एक फ़ाइल के सभी संस्करण हैं
1 "फ़ाइल" को अनलिंक करते समय;
यदि फ़ाइल किसी कारण से हटाने योग्य नहीं है (संरक्षित है, वहां नहीं है, आदि) तो यह समाप्त हो जाएगा
जल्द ही)।
%ENV में मौजूद किसी विशिष्ट पर्यावरण चर पर भरोसा न करें। %ENV पर भरोसा न करें
प्रविष्टियाँ केस-संवेदी, या यहाँ तक कि केस-संरक्षित भी होती हैं। कहकर %ENV साफ़ करने का प्रयास न करें
"%ENV = ();", या, यदि आपको वास्तव में करना है, तो इसे "$^O ne 'VMS'" पर सशर्त बनाएं क्योंकि इसमें
वीएमएस %ENV तालिका प्रति-प्रक्रिया कुंजी-मूल्य स्ट्रिंग तालिका से कहीं अधिक है।
वीएमएस पर, %ENV हैश में कुछ प्रविष्टियाँ गतिशील रूप से बनाई जाती हैं जब उनकी कुंजी का उपयोग किया जाता है
यदि वे पहले से मौजूद नहीं थे तो पढ़ें। $ENV{HOME}, $ENV{TERM}, $ENV{PATH} के लिए मान
और $ENV{USER}, गतिशील रूप से उत्पन्न होने के लिए जाने जाते हैं। जो विशिष्ट नाम हैं
गतिशील रूप से उत्पन्न वीएमएस पर सी लाइब्रेरी के संस्करण के साथ भिन्न हो सकता है, और भी बहुत कुछ
प्रलेखित की तुलना में मौजूद हैं।
वीएमएस पर डिफ़ॉल्ट रूप से, %ENV हैश में परिवर्तन पर्ल के बाहर निकलने के बाद भी जारी रहता है। बाद का
उसी प्रक्रिया में पर्ल का आह्वान अनजाने में पर्यावरण सेटिंग्स को प्राप्त कर सकता है
जो अस्थायी होने के लिए थे।
किसी भी चीज़ के लिए सिग्नल या %SIG पर भरोसा न करें।
फ़ाइलनाम ग्लोबिंग पर भरोसा न करें. इसके बजाय "opendir", "readdir", और "closedir" का उपयोग करें।
प्रति-प्रोग्राम पर्यावरण चर, या प्रति-प्रोग्राम वर्तमान निर्देशिकाओं पर भरोसा न करें।
$! के विशिष्ट मानों पर भरोसा न करें, न तो संख्यात्मक और न ही विशेष रूप से स्ट्रिंग मानों पर।
उपयोगकर्ता अपना स्थान बदल सकते हैं, जिससे त्रुटि संदेश उनके स्थान में अनुवादित हो सकते हैं
भाषाएँ। यदि आप POSIXish वातावरण पर भरोसा कर सकते हैं, तो आप पोर्टेबल रूप से प्रतीकों का उपयोग कर सकते हैं
"एर्नो" मॉड्यूल द्वारा परिभाषित, जैसे "एनोएंट"। और $ के मूल्यों पर भरोसा मत करो! बिल्कुल भी
विफल सिस्टम कॉल के तुरंत बाद को छोड़कर।
आदेश नामों बनाम पट्टिका पथनाम
यह न मानें कि किसी कमांड या प्रोग्राम को "सिस्टम" या "एग्जीक्यूट" के साथ शुरू करने के लिए इस्तेमाल किया जाने वाला नाम हो सकता है
इसका उपयोग उस फ़ाइल के अस्तित्व का परीक्षण करने के लिए भी किया जा सकता है जिसमें उसके लिए निष्पादन योग्य कोड होता है
आदेश या प्रोग्राम. सबसे पहले, कई प्रणालियों में "आंतरिक" कमांड होते हैं जो अंतर्निहित होते हैं
शेल या ओएस और जबकि इन आदेशों को लागू किया जा सकता है, कोई संबंधित फ़ाइल नहीं है।
दूसरा, कुछ ऑपरेटिंग सिस्टम (उदाहरण के लिए, सिगविन, डीजेजीपीपी, ओएस/2, और वीओएस) में आवश्यक प्रत्यय हैं
निष्पादन योग्य फ़ाइलों के लिए; इन प्रत्ययों को आम तौर पर कमांड नाम पर अनुमति दी जाती है लेकिन हैं
आवश्यक नहीं। इस प्रकार, एक आदेश की तरह "पर्ल" नामक फ़ाइल में मौजूद हो सकता है "पर्ल", "perl.exe",
or "perl.pm", ऑपरेटिंग सिस्टम पर निर्भर करता है। "कॉन्फिग" में वेरिएबल "_exe"
मॉड्यूल निष्पादन योग्य प्रत्यय रखता है, यदि कोई हो। तीसरा, वीएमएस पोर्ट सावधानीपूर्वक $^X और सेट करता है
$Config{perlpath} ताकि आगे किसी प्रक्रिया की आवश्यकता न हो। ये भी वैसा ही है,
क्योंकि नीचे उपयोग किए गए मिलान नियमित अभिव्यक्ति को तब संभावित से निपटना होगा
वीएमएस फ़ाइल नाम में अनुवर्ती संस्करण संख्या।
विभिन्न आवश्यकताओं को ध्यान में रखते हुए, $^X को फ़ाइल पथनाम में परिवर्तित करना
ऑपरेटिंग सिस्टम संभावनाएँ, कहें:
कॉन्फिग का उपयोग करें;
मेरा $thisperl = $^X;
अगर ($^ओ 'वीएमएस')
{$thisperl .= $Config{_exe} जब तक $thisperl =~ m/$Config{_exe}$/i;}
$Config{perlpath} को फ़ाइल पथनाम में बदलने के लिए कहें:
कॉन्फिग का उपयोग करें;
मेरा $thisperl = $Config{perlpath};
अगर ($^ओ 'वीएमएस')
{$thisperl .= $Config{_exe} जब तक $thisperl =~ m/$Config{_exe}$/i;}
शुद्ध कार्यशील
यह मत मानिए कि आप सार्वजनिक इंटरनेट तक पहुँच सकते हैं।
यह मत मानें कि फ़ायरवॉल के माध्यम से सार्वजनिक इंटरनेट तक पहुंचने का केवल एक ही रास्ता है।
यह मत मानें कि आप 80 या किसी वेब के अलावा किसी अन्य पोर्ट के माध्यम से बाहरी दुनिया तक पहुंच सकते हैं
प्रॉक्सी. एफ़टीपी कई फ़ायरवॉल द्वारा अवरुद्ध है।
यह न मानें कि आप स्थानीय एसएमटीपी पोर्ट से कनेक्ट होकर ईमेल भेज सकते हैं।
यह न मानें कि आप 'लोकलहोस्ट' नाम से खुद तक या किसी नोड तक पहुंच सकते हैं। जो उसी
'127.0.0.1' के लिए जाता है। आपको दोनों को आज़माना होगा.
यह न मानें कि होस्ट के पास केवल एक ही नेटवर्क कार्ड है, या यह कई लोगों से जुड़ नहीं सकता है
आभासी आईपी पते.
किसी विशेष नेटवर्क डिवाइस का नाम न मानें.
यह मत मानें कि "ioctl()" का कोई विशेष सेट काम करेगा।
यह मत मानें कि आप मेजबानों को पिंग कर सकते हैं और उत्तर प्राप्त कर सकते हैं।
यह न मानें कि कोई विशेष पोर्ट (सेवा) प्रतिक्रिया देगा।
यह न मानें कि "Sys::Hostname" (या कोई अन्य API या कमांड) पूरी तरह से लौटाता है
योग्य होस्टनाम या गैर-योग्य होस्टनाम: यह सब इस बात पर निर्भर करता है कि सिस्टम कैसा था
विन्यस्त यह भी याद रखें कि डीएचसीपी और एनएटी जैसी चीज़ों के लिए, होस्टनाम आपको वापस मिलता है
बहुत उपयोगी नहीं हो सकता.
उपरोक्त सभी "नहीं करें": कठिन लग सकते हैं, और वे हैं, लेकिन कुंजी नीचा दिखाना है
यदि कोई उस विशेष नेटवर्क सेवा तक नहीं पहुंच पाता है जो वह चाहता है, तो शालीनता से। कर्कश या
हैंगिंग बहुत प्रोफेशनल नहीं लगती.
इंटरप्रोसेस संचार (आईपीसी)
सामान्य तौर पर, पोर्टेबल होने के लिए बनाए गए कोड में सीधे सिस्टम तक न पहुंचें। इसका मतलब है, नहीं
"सिस्टम", "निष्पादन", "कांटा", "पाइप", "``", "qx//", "ओपन" के साथ "|", न ही कोई अन्य
चीज़ें जो पर्ल हैकर बनने लायक बनाती हैं।
बाहरी प्रक्रियाओं को लॉन्च करने वाले कमांड आमतौर पर अधिकांश प्लेटफार्मों पर समर्थित होते हैं (हालांकि
उनमें से कई किसी भी प्रकार के फोर्किंग का समर्थन नहीं करते हैं)। इनके उपयोग में समस्या उत्पन्न होती है
आप उन्हें किस लिए बुलाते हैं. बाहरी उपकरणों को अक्सर अलग-अलग नाम दिए जाते हैं
प्लेटफ़ॉर्म, एक ही स्थान पर उपलब्ध नहीं हो सकते हैं, विभिन्न तर्क स्वीकार कर सकते हैं,
अलग-अलग व्यवहार कर सकते हैं, और अक्सर अपने परिणाम प्लेटफ़ॉर्म-निर्भर तरीके से प्रस्तुत करते हैं।
इस प्रकार, आपको सुसंगत परिणाम प्राप्त करने के लिए शायद ही कभी उन पर निर्भर रहना चाहिए। (फिर फिर, यदि
आप कॉल कर रहे हैं netstat -a, आप शायद यह उम्मीद नहीं करेंगे कि यह यूनिक्स और सीपी/एम दोनों पर चलेगा।)
पर्ल कोड का एक विशेष रूप से सामान्य बिट एक पाइप को खोलना है मेल भेजे:
खुला (मेल, '|/usr/lib/sendmail -टी')
या मरो "सेंडमेल को फोर्क नहीं कर सकता: $!";
यह सिस्टम प्रोग्रामिंग के लिए ठीक है जब सेंडमेल उपलब्ध होने के बारे में जाना जाता है। लेकिन यह है
कई गैर-यूनिक्स प्रणालियों के लिए ठीक नहीं है, और यहां तक कि कुछ यूनिक्स प्रणालियों के लिए भी जिनमें सेंडमेल नहीं हो सकता है
स्थापित. यदि पोर्टेबल समाधान की आवश्यकता है, तो सीपीएएन पर विभिन्न वितरण देखें
हालत से समझौता करो। "मेलटूल्स" वितरण में "मेल::मेलर" और "मेल::सेंड" हैं
आमतौर पर उपयोग किया जाता है, और "मेल", "सेंडमेल" और सहित कई मेलिंग विधियां प्रदान करता है
यदि मेल ट्रांसफर एजेंट उपलब्ध नहीं है तो डायरेक्ट एसएमटीपी ("नेट::एसएमटीपी" के माध्यम से)। "मेल::मेल भेजें"
एक स्टैंडअलोन मॉड्यूल है जो सरल, प्लेटफ़ॉर्म-स्वतंत्र मेलिंग प्रदान करता है।
यूनिक्स सिस्टम V आईपीसी ("msg*(), sem*(), shm*()") सभी यूनिक्स पर भी उपलब्ध नहीं है
प्लेटफार्मों।
"पैक("एन", 10, 20, 30, 40)" के नंगे परिणाम या नंगे वी-स्ट्रिंग्स (जैसे) का उपयोग न करें
IPv10.20.30.40 पतों को दर्शाने के लिए "v4") के रूप में: दोनों फॉर्म केवल चार बाइट्स को पैक करते हैं
नेटवर्क क्रम. यह सी भाषा "in_addr" संरचना के बराबर होगा (जो कि है)।
सॉकेट कोड आंतरिक रूप से उपयोग करता है) की गारंटी नहीं है। पोर्टेबल होने के लिए की दिनचर्या का उपयोग करें
"सॉकेट" एक्सटेंशन, जैसे "inet_aton()", "inet_ntoa()", और "sockaddr_in()"।
पोर्टेबल कोड के लिए सामान्य नियम यह है: यह सब पोर्टेबल पर्ल में करें, या एक मॉड्यूल का उपयोग करें (वह)।
आंतरिक रूप से इसे प्लेटफ़ॉर्म-विशिष्ट कोड के साथ कार्यान्वित किया जा सकता है, लेकिन एक सामान्य इंटरफ़ेस को उजागर करता है)।
बाहरी सबरूटीन्स (एक्सएस)
XS कोड को आमतौर पर किसी भी प्लेटफ़ॉर्म के साथ काम करने के लिए बनाया जा सकता है, लेकिन निर्भर लाइब्रेरी, हेडर
फ़ाइलें इत्यादि आसानी से उपलब्ध या पोर्टेबल नहीं हो सकती हैं, या XS कोड ही हो सकता है
प्लेटफ़ॉर्म-विशिष्ट, जैसा कि पर्ल कोड हो सकता है। यदि लाइब्रेरी और हेडर पोर्टेबल हैं,
तो सामान्यतः यह सुनिश्चित करना उचित है कि XS कोड भी पोर्टेबल है।
XS कोड लिखते समय एक अलग प्रकार की पोर्टेबिलिटी समस्या उत्पन्न होती है: C की उपलब्धता
अंतिम-उपयोगकर्ता के सिस्टम पर कंपाइलर। सी अपने स्वयं के पोर्टेबिलिटी मुद्दों को साथ लाता है, और
XS कोड लिखने से आपको उनमें से कुछ का पता चल जाएगा। विशुद्ध रूप से पर्ल में लिखना एक आसान तरीका है
पोर्टेबिलिटी प्राप्त करने के लिए.
स्टैण्डर्ड मॉड्यूल
सामान्य तौर पर, मानक मॉड्यूल सभी प्लेटफार्मों पर काम करते हैं। उल्लेखनीय अपवाद "सीपीएएन" हैं
मॉड्यूल (जो वर्तमान में बाहरी प्रोग्रामों से कनेक्शन बनाता है जो उपलब्ध नहीं हो सकते हैं),
प्लेटफ़ॉर्म-विशिष्ट मॉड्यूल (जैसे "ExtUtils::MM_VMS"), और DBM मॉड्यूल।
सभी प्लेटफ़ॉर्म पर कोई एक DBM मॉड्यूल उपलब्ध नहीं है। "SDBM_File" और अन्य हैं
आम तौर पर सभी यूनिक्स और डॉसिश पोर्ट पर उपलब्ध है, लेकिन मैकपर्ल में नहीं, केवल वहीं
"एनडीबीएम_फाइल" और "डीबी_फाइल" उपलब्ध हैं।
अच्छी खबर यह है कि कम से कम कुछ DBM मॉड्यूल उपलब्ध होना चाहिए, और "AnyDBM_File" उपलब्ध होगा
जो भी मॉड्यूल मिल सके उसका उपयोग करें। निःसंदेह, तब कोड को काफी सख्त होना होगा,
सबसे बड़े सामान्य कारक तक गिरना (उदाहरण के लिए, प्रत्येक रिकॉर्ड के लिए 1K से अधिक नहीं), ताकि
यह किसी भी DBM मॉड्यूल के साथ काम करेगा. अधिक विवरण के लिए AnyDBM_File देखें।
पहर और तारीख
दिन के समय और कैलेंडर की तारीख के बारे में सिस्टम की धारणा व्यापक रूप से भिन्न रूप से नियंत्रित होती है
तौर तरीकों। यह न मानें कि समयक्षेत्र $ENV{TZ} में संग्रहीत है, और यदि है भी, तो यह न मानें
कि आप उस वेरिएबल के माध्यम से समयक्षेत्र को नियंत्रित कर सकते हैं। के बारे में कुछ भी अनुमान न लगाएं
तीन-अक्षर समयक्षेत्र संक्षिप्ताक्षर (उदाहरण के लिए कि एमएसटी माउंटेन मानक होगा
समय, यह मॉस्को मानक समय के लिए जाना जाता है)। यदि आपको टाइमज़ोन का उपयोग करने की आवश्यकता है,
उन्हें कुछ स्पष्ट प्रारूप में व्यक्त करें जैसे कि यूटीसी से मिनटों की सटीक संख्या,
या POSIX समयक्षेत्र प्रारूप।
यह न मानें कि युग 00:00:00, 1 जनवरी 1970 से शुरू होता है, क्योंकि वह ओएस है- और
कार्यान्वयन-विशिष्ट। किसी दिनांक को स्पष्ट प्रस्तुतिकरण में संग्रहीत करना बेहतर है।
ISO 8601 मानक YYYY-MM-DD को दिनांक प्रारूप या YYYY-MM-DDTHH:MM:SS के रूप में परिभाषित करता है।
(यह एक शाब्दिक "टी" है जो तारीख को समय से अलग करता है)। कृपया आईएसओ 8601 का उपयोग करें
हमें यह अनुमान लगाने के बजाय कि 02/03/04 कौन सी तारीख हो सकती है। आईएसओ 8601 वैसे ही अच्छा दिखता है।
एक पाठ प्रतिनिधित्व (जैसे "1987-12-18") को आसानी से ओएस-विशिष्ट में परिवर्तित किया जा सकता है
"दिनांक::पार्स" जैसे मॉड्यूल का उपयोग करके मूल्य। मानों की एक श्रृंखला, जैसे कि लौटाए गए मान
"लोकलटाइम", को "टाइम::लोकल" का उपयोग करके ओएस-विशिष्ट प्रतिनिधित्व में परिवर्तित किया जा सकता है।
विशिष्ट समय की गणना करते समय, जैसे समय या दिनांक मॉड्यूल में परीक्षणों के लिए, यह हो सकता है
युग के लिए ऑफसेट की गणना करने के लिए उपयुक्त।
समय की आवश्यकता है::स्थानीय;
मेरा $ऑफ़सेट = समय::स्थानीय::समयग्राम(0, 0, 0, 1, 0, 70);
यूनिक्स में $ऑफ़सेट का मान 0 होगा, लेकिन मैक ओएस क्लासिक में कुछ बड़ी संख्या होगी।
उचित मूल्य क्या होना चाहिए यह जानने के लिए $offset को यूनिक्स समय मान में जोड़ा जा सकता है
कोई भी प्रणाली.
चरित्र सेट और चरित्र एन्कोडिंग
चरित्र सेट के बारे में बहुत कम सोचें।
वर्णों के संख्यात्मक मान ("ord", "chr") के बारे में कुछ भी न मानें। स्पष्ट प्रयोग न करें
कोड बिंदु श्रेणियाँ (जैसे "\xHH-\xHH)"। हालाँकि, पर्ल v5.22 से शुरू होकर, रेगुलर एक्सप्रेशन
पैटर्न ब्रैकेटेड वर्ण वर्ग श्रेणियां निर्दिष्ट हैं जैसे "qr/[\N{U+HH}-\N{U+HH}]/" हैं
पोर्टेबल. आप पोर्टेबल रूप से "[:प्रिंट:]" जैसे प्रतीकात्मक चरित्र वर्गों का उपयोग कर सकते हैं।
यह न मानें कि वर्णमाला वर्ण सन्निहित रूप से एन्कोड किए गए हैं (संख्यात्मक में)।
समझ)। अंतराल हो सकते हैं. हालाँकि, पर्ल में विशेष कोडिंग यह गारंटी देती है कि सभी उपसमुच्चय
"qr/[AZ]/", "qr/[az]/", और "qr/[0-9]/" का व्यवहार अपेक्षा के अनुरूप है। "tr///" समान व्यवहार करता है
इन श्रेणियों के लिए. पैटर्न में, "\N{...}" का उपयोग करके अंतिम बिंदुओं के साथ निर्दिष्ट कोई भी सीमा
नोटेशन कैरेक्टर सेट पोर्टेबिलिटी सुनिश्चित करता है, लेकिन यह पर्ल v5.22 में एक बग है, कि यह
"tr///" के बारे में सत्य नहीं है।
पात्रों के क्रम के बारे में कुछ भी न मानें। छोटे अक्षर हो सकते हैं
बड़े अक्षरों के पहले या बाद में आना; लोअरकेस और अपरकेस को आपस में जोड़ा जा सकता है
ताकि "ए" और "ए" दोनों "बी" से पहले आएं; उच्चारण और अन्य अंतर्राष्ट्रीय पात्र
इंटरलेस्ड किया जा सकता है ताकि एई "बी" से पहले आए। इसे सॉर्ट करने के लिए Unicode::Collate का उपयोग किया जा सकता है
सब बाहर जाएं।
अंतर्राष्ट्रीयकरण
यदि आप POSIX (एक बड़ी धारणा) मान सकते हैं, तो आप POSIX के बारे में अधिक पढ़ सकते हैं
पर्ललोकेल से स्थानीय प्रणाली। स्थानीय प्रणाली कम से कम चीजों को बनाने का प्रयास करती है
थोड़ा अधिक पोर्टेबल, या कम से कम गैर-अंग्रेज़ी के लिए अधिक सुविधाजनक और देशी-अनुकूल
उपयोगकर्ता. सिस्टम वर्ण सेट और एन्कोडिंग, और दिनांक और समय को प्रभावित करता है
स्वरूपण--अन्य बातों के अलावा।
यदि आप वास्तव में अंतर्राष्ट्रीय बनना चाहते हैं, तो आपको यूनिकोड पर विचार करना चाहिए। Perluniintro और देखें
अधिक जानकारी के लिए perlunicode.
यदि आप "स्रोत कोड" में गैर-ASCII बाइट्स (बाइट्स 0x00..0x7f के बाहर) का उपयोग करना चाहते हैं
आपका कोड, पोर्टेबल होने के लिए आपको यह स्पष्ट करना होगा कि वे कौन से बाइट्स हैं। कोई
उदाहरण के लिए, हो सकता है कि आप अपने कोड का उपयोग UTF-8 लोकेल के अंतर्गत कर रहे हों, इस स्थिति में यह यादृच्छिक मूल निवासी होगा
बाइट्स अवैध हो सकते हैं ("विकृत UTF-8 ...") इसका मतलब है कि उदाहरण के लिए आईएसओ एम्बेड करना
आपकी स्ट्रिंग में 8859x1f से अधिक 0-7 बाइट्स बाद में समस्या पैदा कर सकते हैं। यदि बाइट्स हैं
मूल 8-बिट बाइट्स, आप "बाइट्स" प्राग्मा का उपयोग कर सकते हैं। यदि बाइट्स एक स्ट्रिंग में हैं (नियमित)।
अभिव्यक्ति जिज्ञासु तार हैं), आप अक्सर "\xHH" या अधिक पोर्टेबल रूप से भी उपयोग कर सकते हैं,
बाइट्स को यथावत एम्बेड करने के बजाय "\N{U+HH}" नोटेशन। यदि आप अपना लिखना चाहते हैं
UTF-8 में कोड, आप utf8 का उपयोग कर सकते हैं।
प्रणाली संसाधन
यदि आपका कोड गंभीर रूप से बाधित (या गायब!) वर्चुअल वाले सिस्टम के लिए नियत है
मेमोरी सिस्टम तब आप बनना चाहते हैं विशेष रूप से ऐसे व्यर्थ निर्माणों से बचने का ध्यान रखें
के रूप में:
मेरी @लाइनें = <$ Very_large_file>; # खराब
जबकि (<$fh>) {$file .= $_} # कभी-कभी ख़राब
मेरी $फ़ाइल = शामिल हों('', <$fh>); # बेहतर
अंतिम दो रचनाएँ अधिकांश लोगों को सहज ज्ञान से परे प्रतीत हो सकती हैं। पहला बार-बार बढ़ता है
एक स्ट्रिंग, जबकि दूसरा एक बार में मेमोरी का एक बड़ा हिस्सा आवंटित करता है। कुछ पर
सिस्टम, दूसरा पहले की तुलना में अधिक कुशल है।
सुरक्षा
अधिकांश बहु-उपयोगकर्ता प्लेटफ़ॉर्म सुरक्षा के बुनियादी स्तर प्रदान करते हैं, जिन्हें आमतौर पर लागू किया जाता है
फ़ाइल सिस्टम स्तर. हालाँकि, कुछ लोग दुर्भाग्य से ऐसा नहीं करते हैं। इस प्रकार उपयोगकर्ता आईडी की धारणा, या
"होम" निर्देशिका, या यहां तक कि लॉग-इन होने की स्थिति भी कई लोगों के लिए पहचानने योग्य नहीं हो सकती है
प्लेटफार्म. यदि आप ऐसे प्रोग्राम लिखते हैं जो सुरक्षा के प्रति सचेत हैं, तो आमतौर पर यह जानना सबसे अच्छा होता है
आप किस प्रकार की प्रणाली के तहत चल रहे होंगे ताकि आप स्पष्ट रूप से कोड लिख सकें
वह प्लेटफ़ॉर्म (या प्लेटफ़ॉर्म का वर्ग)।
यूनिक्स फ़ाइल सिस्टम एक्सेस शब्दार्थ को न मानें: ऑपरेटिंग सिस्टम या फ़ाइल सिस्टम
हो सकता है कि कुछ ACL सिस्टम का उपयोग किया जा रहा हो, जो सामान्य "rwx" की तुलना में अधिक समृद्ध भाषाएँ हों। भले ही
"आरडब्ल्यूएक्स" मौजूद है, उनके शब्दार्थ भिन्न हो सकते हैं।
(सुरक्षा के दृष्टिकोण से, कुछ करने का प्रयास करने से पहले अनुमतियों का परीक्षण करना है
वैसे भी मूर्खतापूर्ण: यदि कोई यह कोशिश करता है, तो दौड़ की स्थिति की संभावना है। कोई या
अनुमतियाँ जाँच और वास्तविक के बीच कुछ अनुमतियाँ बदल सकती हैं
संचालन। बस ऑपरेशन का प्रयास करें।)
यूनिक्स उपयोगकर्ता और समूह शब्दार्थ को न मानें: विशेष रूप से, $< और $> (या $() की अपेक्षा न करें
और $)) पहचान (या सदस्यता) बदलने के लिए काम करने के लिए।
सेट-यूआईडी और सेट-गिड शब्दार्थ को न मानें। (और यदि आप ऐसा करते भी हैं, तो दो बार सोचें: सेट-यूआईडी और
सेट-गिड सुरक्षा वर्म्स का एक ज्ञात कैन है।)
अंदाज
उस समय के लिए जब प्लेटफ़ॉर्म-विशिष्ट कोड रखना आवश्यक हो, रखने पर विचार करें
प्लेटफ़ॉर्म-विशिष्ट कोड एक ही स्थान पर, जिससे अन्य प्लेटफ़ॉर्म पर पोर्ट करना आसान हो जाता है। उपयोग
प्लेटफ़ॉर्म को अलग करने के लिए "कॉन्फ़िगर" मॉड्यूल और विशेष वेरिएबल $^O, जैसा कि इसमें वर्णित है
"प्लेटफ़ॉर्म"।
अपने मॉड्यूल या प्रोग्राम के साथ आपूर्ति किए जाने वाले परीक्षणों में सावधान रहें। मॉड्यूल कोड पूर्ण हो सकता है
पोर्टेबल, लेकिन इसके परीक्षण नहीं हो सकते हैं। ऐसा अक्सर तब होता है जब परीक्षण दूसरे को जन्म देते हैं
परीक्षण में सहायता के लिए बाहरी प्रोग्रामों को प्रोसेस करता है या कॉल करता है, या जब (जैसा कि ऊपर बताया गया है)।
परीक्षण फ़ाइल सिस्टम और पथों के बारे में कुछ बातें मानते हैं। सावधान रहें कि किसी पर निर्भर न रहें
त्रुटियों के लिए विशिष्ट आउटपुट शैली, जैसे $ की जाँच करते समय! एक असफल सिस्टम कॉल के बाद.
$ का उपयोग करना! इसे आउटपुट के रूप में प्रदर्शित करने के अलावा किसी अन्य चीज़ के लिए संदिग्ध है (हालांकि देखें)।
त्रुटि मान के लिए उचित रूप से पोर्टेबल परीक्षण के लिए "एरनो" मॉड्यूल)। कुछ प्लेटफ़ॉर्म उम्मीद करते हैं कि
कुछ आउटपुट प्रारूप, और उन प्लेटफ़ॉर्म पर पर्ल को तदनुसार समायोजित किया गया होगा।
विशेष रूप से, त्रुटि मान का परीक्षण करते समय रेगेक्स को एंकर न करें।
सीपीएएन परीक्षक
सीपीएएन पर अपलोड किए गए मॉड्यूल का परीक्षण विभिन्न प्लेटफार्मों पर विभिन्न स्वयंसेवकों द्वारा किया जाता है।
इन सीपीएएन परीक्षकों को प्रत्येक नए अपलोड के बारे में मेल द्वारा सूचित किया जाता है, और सूची का उत्तर दिया जाता है
पास, फेल, एनए (इस प्लेटफॉर्म पर लागू नहीं), या अज्ञात (अज्ञात), किसी के साथ
प्रासंगिक संकेतन.
परीक्षण का उद्देश्य दोहरा है: एक, डेवलपर्स को उनकी किसी भी समस्या को ठीक करने में मदद करना
वह कोड जो अन्य प्लेटफ़ॉर्म पर परीक्षण की कमी के कारण सामने आता है; दो, उपयोगकर्ताओं को उपलब्ध कराने के लिए
इस बारे में जानकारी के साथ कि कोई दिया गया मॉड्यूल किसी दिए गए प्लेटफ़ॉर्म पर काम करता है या नहीं।
यह भी देखें:
· मेलिंग सूची: [ईमेल संरक्षित]
· परीक्षण परिणाम:http://www.cpantesters.org/>
प्लेटफार्म
पर्ल को $^O वैरिएबल के साथ बनाया गया है जो उस ऑपरेटिंग सिस्टम को इंगित करता है जिस पर इसे बनाया गया था।
इसे कोड को गति देने में मदद के लिए लागू किया गया था, अन्यथा उसे "कॉन्फिग का उपयोग करना" पड़ता
$Config{osname} के मान का उपयोग करें। बेशक, के बारे में अधिक विस्तृत जानकारी प्राप्त करने के लिए
सिस्टम, %Config को देखने की निश्चित रूप से अनुशंसा की जाती है।
हालाँकि, %Config पर हमेशा भरोसा नहीं किया जा सकता, क्योंकि इसे संकलन समय पर बनाया गया था। यदि पर्ल
एक ही स्थान पर बनाया गया था, फिर अन्यत्र स्थानांतरित किया गया, कुछ मान गलत हो सकते हैं। मूल्य
हो सकता है कि इस तथ्य के बाद इसे संपादित भी किया गया हो।
यूनिक्स
पर्ल यूनिक्स और यूनिक्स जैसे प्लेटफार्मों की आश्चर्यजनक विविधता पर काम करता है (उदाहरण के लिए देखें)।
में फ़ाइलें संकेत/ स्रोत कोड किट में निर्देशिका)। इनमें से अधिकांश प्रणालियों पर,
$^O का मान (इसलिए $Config{'osname'} भी) या तो लोअरकेसिंग द्वारा निर्धारित किया जाता है और
"uname -a" (या) टाइप करके लौटाई गई स्ट्रिंग के पहले फ़ील्ड से विराम चिह्न हटा दें
एक समान कमांड) शेल प्रॉम्प्ट पर या फ़ाइल सिस्टम की उपस्थिति का परीक्षण करके
विशिष्ट रूप से नामित फ़ाइलें जैसे कर्नेल या हेडर फ़ाइल। उदाहरण के लिए, उनमें से कुछ यहां दिए गए हैं
अधिक लोकप्रिय यूनिक्स स्वाद:
uname $^O $Config{'archname'}
--------------------------------------------
ऐक्स ऐक्स ऐक्स
बीएसडी/ओएस बीएसडीओएस आई386-बीएसडीओएस
डार्विन डार्विन डार्विन
डायनिक्स/पीटीएक्स डाइनिक्सपीटीएक्स i386-डायनिक्सपीटीएक्स
फ्रीबीएसडी फ्रीबीएसडी फ्रीबीएसडी-आई386
हाइकु हाइकु BePC-हाइकु
लिनक्स लिनक्स आर्म-लिनक्स
लिनक्स लिनक्स आर्मव5टेल-लिनक्स
लिनक्स लिनक्स i386-लिनक्स
लिनक्स लिनक्स i586-लिनक्स
लिनक्स लिनक्स पीपीसी-लिनक्स
एचपी-यूएक्स एचपीयूएक्स पीए-आरआईएससी1.1
आईआरआईएक्स आईरिक्स आईरिक्स
मैक ओएस एक्स डार्विन डार्विन
नेक्स्ट 3 नेक्स्ट नेक्स्ट-फैट
अगला 4 अगला ओपनस्टेप-मच
ओपनबीएसडी ओपनबीएसडी आई386-ओपनबीएसडी
OSF1 dec_osf अल्फा-dec_osf
रिलायंटयूनिक्स-एन एसवीआर4 आरएम400-एसवीआर4
SCO_SV sco_sv i386-sco_sv
SINIX-एन svr4 RM400-svr4
एसएन4609 यूनिकोस CRAY_C90-यूनिकोस
एसएन6521 यूनिकोएसएमके टी3ई-यूनिकोएसएमके
एसएन9617 यूनिकोस CRAY_J90-यूनिकोस
सनओएस सोलारिस सन4-सोलारिस
सनओएस सोलारिस i86पीसी-सोलारिस
SunOS4 sunos sun4-sunos
क्योंकि $Config{archname} का मान हार्डवेयर आर्किटेक्चर पर निर्भर हो सकता है
$^O के मान से अधिक भिन्न है।
डॉस और संजात
पर्ल को लंबे समय से पीसी-डॉस जैसे सिस्टम के तहत चलने वाले इंटेल-शैली माइक्रो कंप्यूटर में पोर्ट किया गया है,
MS-DOS, OS/2, और अधिकांश Windows प्लेटफ़ॉर्म का उल्लेख आप स्वयं कर सकते हैं (सिवाय इसके)।
विंडोज़ सीई, यदि आप इसे गिनें)। उपयोगकर्ता परिचित हैं COMMAND.COM or अध्यक्ष एवं प्रबंध निदेशक। EXE शैली के गोले
ध्यान रखें कि इनमें से प्रत्येक फ़ाइल विनिर्देश में सूक्ष्म अंतर हो सकते हैं:
मेरी $filespec0 = "c:/foo/bar/file.txt";
मेरी $filespec1 = "c:\\foo\\bar\\file.txt";
मेरी $filespec2 = 'c:\foo\bar\file.txt';
मेरी $filespec3 = 'c:\\foo\\bar\\file.txt';
सिस्टम कॉल पथ विभाजक के रूप में या तो "/" या "\" स्वीकार करते हैं। हालाँकि, कई कमांड-लाइन
DOS विंटेज की उपयोगिताएँ "/" को विकल्प उपसर्ग के रूप में मानती हैं, इसलिए फ़ाइल नामों से भ्रमित हो सकते हैं
युक्त "/"। किसी भी बाहरी प्रोग्राम को कॉल करने के अलावा, "/" ठीक काम करेगा, और
शायद बेहतर, क्योंकि यह लोकप्रिय उपयोग के साथ अधिक सुसंगत है, और की समस्या से बचा जाता है
यह याद रखना कि क्या प्रतिकार करना है और क्या नहीं।
DOS FAT फ़ाइल सिस्टम केवल "8.3" शैली फ़ाइल नाम को समायोजित कर सकता है। "मामले के तहत-
असंवेदनशील, लेकिन केस-संरक्षित" HPFS (OS/2) और NTFS (NT) फ़ाइल सिस्टम आपको होना पड़ सकता है
"रीडिर" जैसे फ़ंक्शंस के साथ लौटाए गए या फ़ंक्शंस जैसे फ़ंक्शंस के साथ उपयोग किए जाने वाले केस के बारे में सावधान रहें
"खुला" या "ओपेंडिर"।
DOS कई फ़ाइल नामों को भी विशेष मानता है, जैसे AUX, PRN, NUL, CON, COM1, LPT1,
LPT2, इत्यादि। दुर्भाग्य से, यदि आप कोई शामिल करते हैं तो कभी-कभी ये फ़ाइल नाम भी काम नहीं करेंगे
स्पष्ट निर्देशिका उपसर्ग. यदि आप अपना कोड चाहते हैं तो ऐसे फ़ाइल नामों से बचना सबसे अच्छा है
DOS और उसके डेरिवेटिव के लिए पोर्टेबल हो। यह जानना कठिन है कि ये सब क्या हैं,
दुर्भाग्य से।
इन ऑपरेटिंग सिस्टम के उपयोगकर्ता स्क्रिप्ट का उपयोग करना भी चाह सकते हैं जैसे pl2bat.बैट
or pl2cmd अपनी स्क्रिप्ट के चारों ओर रैपर लगाने के लिए।
फ़ाइलों को पढ़ते और लिखते समय STDIO द्वारा न्यूलाइन ("\n") का अनुवाद "\015\012" के रूप में किया जाता है
(देखें "न्यूलाइन्स")। "binmode(FILEHANDLE)" उसके लिए "\n" का अनुवाद "\012" रखेगा
फ़ाइलहैंडल. चूंकि यह अन्य प्रणालियों पर नो-ऑप है, इसलिए क्रॉस- के लिए "बिनमोड" का उपयोग किया जाना चाहिए।
प्लेटफ़ॉर्म कोड जो बाइनरी डेटा से संबंधित है। यह मान लिया गया है कि आपको इसका एहसास पहले से ही है
आपका डेटा बाइनरी में है. सामान्य प्रयोजन के कार्यक्रमों को अक्सर उनके बारे में कुछ भी नहीं मानना चाहिए
डेटा.
विभिन्न DOSish पर्ल्स के लिए $^O वेरिएबल और $Config{archname} मान इस प्रकार हैं:
OS $^O $Config{archname} आईडी संस्करण
-------------------------------------------------- ------
एमएस-डॉस क्या करें?
पीसी-डॉस क्या करें?
ओएस/2 ओएस2?
विंडोज़ 3.1 ? ? 0 3 01
विंडोज़ 95 MSWin32 MSWin32-x86 1 4 00
विंडोज़ 98 MSWin32 MSWin32-x86 1 4 10
विंडोज़ एमई MSWin32 MSWin32-x86 1?
विंडोज़ एनटी MSWin32 MSWin32-x86 2 4 xx
विंडोज़ एनटी MSWin32 MSWin32-अल्फा 2 4 xx
विंडोज़ एनटी MSWin32 MSWin32-पीपीसी 2 4 xx
विंडोज़ 2000 MSWin32 MSWin32-x86 2 5 00
विंडोज एक्सपी MSWin32 MSWin32-x86 2 5 01
विंडोज़ 2003 MSWin32 MSWin32-x86 2 5 02
विंडोज़ विस्टा MSWin32 MSWin32-x86 2 6 00
विंडोज़ 7 MSWin32 MSWin32-x86 2 6 01
विंडोज़ 7 MSWin32 MSWin32-x64 2 6 01
विंडोज़ 2008 MSWin32 MSWin32-x86 2 6 01
विंडोज़ 2008 MSWin32 MSWin32-x64 2 6 01
विंडोज़ सीई MSWin32? 3
सिग्विन सिग्विन सिग्विन
विभिन्न MSWin32 पर्ल के मान के माध्यम से उस ओएस को अलग कर सकते हैं जिस पर वे चल रहे हैं
सूची का पाँचवाँ तत्व "Win32::GetOSVersion()" से लौटाया गया। उदाहरण के लिए:
यदि ($^O eq 'MSWin32') {
मेरा @os_version_info = Win32::GetOSVersion();
प्रिंट +('3.1','95','एनटी')[$os_version_info[4]],"\n";
}
"Win32::IsWinNT()" और "Win32::IsWin95()" भी हैं; "perldoc Win32" आज़माएँ, और इस प्रकार
libwin32 0.19 (कोर पर्ल वितरण का हिस्सा नहीं) "Win32::GetOSName()"। बहुत ही
पोर्टेबल "POSIX::uname()" भी काम करेगा:
c:\> perl -MPOSIX -we "प्रिंट जॉइन '|', uname"
विंडोज़ एनटी|मूनरू|5.0|बिल्ड 2195 (सर्विस पैक 2)|x86
यह भी देखें:
· DOS के लिए djgpp वातावरण,http://www.delorie.com/djgpp/> और पर्लडोस।
· डॉस, ओएस/2 आदि के लिए ईएमएक्स वातावरण। [ईमेल संरक्षित],
<ftp://hobbes.nmsu.edu/pub/os2/dev/emx/> इसके अलावा perlos2.
· Win32 के लिए perlwin32 में या सिग्नस वातावरण के अंतर्गत निर्देश बनाएँ
पर्लसीग्विन.
· Win32 में "Win32::*" मॉड्यूल।
· एक्टिवस्टेट पेज,http://www.activestate.com/>
· Win32 के लिए सिगविन वातावरण; README.साइगविन (पर्लसीग्विन के रूप में स्थापित),
<http://www.cygwin.com/>
· Win32 के लिए U/WIN वातावरण,http://www.research.att.com/sw/tools/uwin/>
· OS/2, perlos2 के लिए निर्देश बनाएं
वीएमएस
वीएमएस पर पर्ल की चर्चा पर्ल वितरण में पर्लवम्स में की गई है।
इस लेखन के समय वीएमएस का आधिकारिक नाम ओपनवीएमएस है।
डिजिटल कमांड लैंग्वेज (डीसीएल) शेल से पर्ल के साथ इंटरैक्ट करने के लिए अक्सर इसकी आवश्यकता होती है
यूनिक्स शेल्स की तुलना में उद्धरण चिह्नों का भिन्न सेट। उदाहरण के लिए:
$ perl -e "प्रिंट ""हैलो, वर्ल्ड.\n"""
हैलो वर्ल्ड।
आपकी पर्ल स्क्रिप्ट को डीसीएल में लपेटने के कई तरीके हैं COM. फ़ाइलें, यदि आप ऐसा हैं
झुका हुआ. उदाहरण के लिए:
$ लिखें sys$output "DCL की ओर से नमस्ते!"
$ यदि p1 .eqs. ""
$ फिर perl -x 'f$environment("प्रक्रिया")
$ अन्यथा पर्ल -x - 'पी1 'पी2'पी3'पी4'पी5'पी6'पी7'पी8
$ डेक/डॉलर='__END__'
#!/usr/bin/perl
प्रिंट करें "पर्ल की ओर से नमस्ते!\n";
__समाप्त__
$ एंडिफ़
यदि आपकी पर्ल-इन-डीसीएल स्क्रिप्ट है तो "$ ASSIGN/nolog/user SYS$COMMAND: SYS$INPUT" का ध्यान रखें
"$read =" जैसी चीजें करने की अपेक्षा करता है ;"।
वीएमएस ऑपरेटिंग सिस्टम में दो फाइल सिस्टम हैं, जो उनकी ऑन-डिस्क संरचना (ओडीएस) द्वारा निर्दिष्ट हैं।
स्तर: ODS-2 और उसका उत्तराधिकारी ODS-5। पर्ल से वीएमएस का आरंभिक पोर्ट ODS-5 से पहले का है,
लेकिन सभी मौजूदा परीक्षण और विकास ODS-5 और इसकी क्षमताओं को मानते हैं, जिसमें केस भी शामिल है
संरक्षण, फाइलस्पेस में विस्तारित वर्ण, और 8192 बाइट्स तक लंबे नाम।
वीएमएस पर पर्ल वीएमएस- या यूनिक्स-शैली फ़ाइल विनिर्देशों में से किसी एक को स्वीकार कर सकता है
इस प्रकार है:
$ perl -ne "प्रिंट करें यदि /perl_setup/i" SYS$LOGIN:LOGIN.COM
$ perl -ne "प्रिंट करें यदि /perl_setup/i" / sys$ लॉगिन/login.com
लेकिन दोनों का मिश्रण नहीं जैसा कि:
$ perl -ne "प्रिंट करें यदि /perl_setup/i" sys$login:/login.com
sys$login नहीं खोल सकता:/login.com: फ़ाइल विनिर्देश सिंटैक्स त्रुटि
सामान्य तौर पर, पोर्टेबिलिटी का सबसे आसान रास्ता हमेशा यूनिक्स प्रारूप में फ़ाइल नाम निर्दिष्ट करना होता है
जब तक कि उन्हें मूल आदेशों या उपयोगिताओं द्वारा संसाधित करने की आवश्यकता न हो। इसके कारण
बाद में विचार करते हुए, फ़ाइल::स्पेक मॉड्यूल डिफ़ॉल्ट रूप से मूल प्रारूप लौटाता है
इनपुट प्रारूप की परवाह किए बिना विनिर्देश। इस डिफ़ॉल्ट को उलटा किया जा सकता है ताकि फ़ाइल नाम
"DECC$FILENAME_UNIX_REPORT" सुविधा को निर्दिष्ट करके हमेशा यूनिक्स प्रारूप में रिपोर्ट किया जाता है
पर्यावरण में तार्किक.
फ़ाइल प्रकार, या एक्सटेंशन, हमेशा VMS-प्रारूप फ़ाइल विनिर्देश में मौजूद होता है, भले ही
यह शून्य लंबाई है. इसका मतलब यह है कि, डिफ़ॉल्ट रूप से, "readdir" a पर एक पिछला बिंदु लौटाएगा
बिना किसी एक्सटेंशन वाली फ़ाइल, इसलिए जहां आप यूनिक्स पर "ए" देखेंगे वहां आपको "ए" दिखाई देगा। वीएमएस पर.
हालाँकि, "DECC$READDIR_DROPDOTNOTYPE" को सक्षम करके अनुगामी बिंदु को दबाया जा सकता है
पर्यावरण में सुविधा (सुविधा तार्किक नामों पर सीआरटीएल दस्तावेज़ देखें)।
"\n" क्या दर्शाता है यह खोली गई फ़ाइल के प्रकार पर निर्भर करता है। यह आमतौर पर "\012" का प्रतिनिधित्व करता है लेकिन
यह "\015", "\012", "\015\012", "\000", "\040" या कुछ भी नहीं हो सकता है, जो इस पर निर्भर करता है
फ़ाइल संगठन और रिकॉर्ड प्रारूप। "VMS::Stdio" मॉड्यूल तक पहुंच प्रदान करता है
वीएमएस पर असामान्य विशेषताओं वाली फ़ाइलों की विशेष "fopen()" आवश्यकताएँ।
OpenVMS पर $^O का मान "VMS" है। आप जो आर्किटेक्चर चला रहे हैं उसे निर्धारित करने के लिए
$Config{'archname'} देखें।
वीएमएस पर, पर्ल "SYS$TIMEZONE_DIFFERENTIAL" तार्किक नाम से यूटीसी ऑफसेट निर्धारित करता है।
हालाँकि वीएमएस युग 17-नवंबर-1858 00:00:00.00 पर शुरू हुआ, "स्थानीय समय" पर कॉल को समायोजित किया गया है
यूनिक्स की तरह, 01-जनवरी-1970 00:00:00.00 से ऑफसेट की गणना करना।
यह भी देखें:
· README.vms (के रूप में स्थापित) README_vms), perlvms
· vmsperl सूची, [ईमेल संरक्षित]
· वेब पर vmsperl,http://www.sidhe.org/vmsperl/index.html>
· वीएमएस सॉफ्टवेयर इंक वेब साइट,http://www.vmssoftware.com>
VOS
वीओएस पर पर्ल (जिसे ओपनवीओएस भी कहा जाता है) पर चर्चा की गई है README.vos पर्ल वितरण में
(पर्लवोस के रूप में स्थापित)। VOS पर पर्ल या तो VOS- या यूनिक्स-शैली फ़ाइल स्वीकार कर सकता है
निम्नलिखित में से किसी एक के अनुसार विशिष्टताएँ:
$ perl -ne "प्रिंट करें यदि /perl_setup/i" >सिस्टम>नोटिस
$ perl -ne "प्रिंट करें यदि /perl_setup/i" /system/नोटिस
या यहां तक कि दोनों का मिश्रण भी इस प्रकार है:
$ perl -ne "प्रिंट करें यदि /perl_setup/i" >system/नोटिस
हालाँकि VOS स्लैश कैरेक्टर को ऑब्जेक्ट नामों में प्रदर्शित होने की अनुमति देता है, क्योंकि VOS पोर्ट
पर्ल इसे एक पथनाम परिसीमन चरित्र, वीओएस फ़ाइलें, निर्देशिका, या लिंक के रूप में व्याख्या करता है
जिनके नाम में स्लैश वर्ण है, उन्हें संसाधित नहीं किया जा सकता। ऐसी फ़ाइलों का नाम बदला जाना चाहिए
इससे पहले कि उन्हें पर्ल द्वारा संसाधित किया जा सके।
VOS के पुराने रिलीज़ (OpenVOS रिलीज़ 17.0 से पहले) फ़ाइल नामों को 32 या उससे कम तक सीमित करते हैं
अक्षर, फ़ाइल नामों को "-" अक्षर से शुरू होने से रोकते हैं, और फ़ाइल को प्रतिबंधित करते हैं
"tr/ !#%&'()*;<=>?//" से मेल खाने वाले किसी भी वर्ण वाले नाम।
VOS के नए रिलीज़ (OpenVOS रिलीज़ 17.0 या बाद के संस्करण) विस्तारित नामक सुविधा का समर्थन करते हैं
names. इन रिलीज़ों पर, फ़ाइल नाम में अधिकतम 255 अक्षर हो सकते हैं, यह निषिद्ध है
"-" वर्ण से आरंभ करने से, और निषिद्ध वर्णों के सेट को घटाकर कोई भी कर दिया जाता है
वर्ण मिलान "tr/#%*<>?//"। रिक्त स्थान और से संबंधित प्रतिबंध हैं
एपोस्ट्रोफ़ेस: इन वर्णों को किसी नाम का आरंभ या अंत नहीं करना चाहिए, न ही वे तुरंत कर सकते हैं
किसी अवधि से पहले या बाद में आना। इसके अतिरिक्त, एक स्थान तुरंत दूसरे से पहले नहीं होना चाहिए
स्थान या हाइफ़न. विशेष रूप से, निम्नलिखित वर्ण संयोजन निषिद्ध हैं:
स्पेस-स्पेस, स्पेस-हाइफ़न, पीरियड-स्पेस, स्पेस-पीरियड, पीरियड-एपोस्ट्रोफ, एपोस्ट्रोफ-
अवधि, अग्रणी या अनुगामी स्थान, और अग्रणी या अनुगामी एपोस्ट्रोफ़। हालाँकि एक
विस्तारित फ़ाइल नाम 255 वर्णों तक सीमित है, पथ नाम अभी भी 256 तक सीमित है
अक्षर.
VOS पर $^O का मान "vos" है। आप जिस आर्किटेक्चर पर चल रहे हैं उसे निर्धारित करने के लिए
सभी %Config को लोड किए बिना आप @INC सरणी की सामग्री की जांच कर सकते हैं
इस तरह:
यदि ($^O =~ /vos/) {
प्रिंट करें "मैं स्ट्रैटस बॉक्स पर हूं!\n";
और} {
प्रिंट करें "मैं स्ट्रैटस बॉक्स पर नहीं हूं!\n";
मरने;
}
यह भी देखें:
· README.vos (पर्लवोस के रूप में स्थापित)
· वीओएस मेलिंग सूची।
वीओएस पर पर्ल के लिए कोई विशिष्ट मेलिंग सूची नहीं है। आप स्ट्रेटस से संपर्क कर सकते हैं
आपके क्षेत्र के लिए टेक्नोलॉजीज ग्राहक सहायता केंद्र (सीएसी), या आप इसका उपयोग कर सकते हैं
स्ट्रैटस एनोनिमस एफ़टीपी पर वितरण फ़ाइलों में स्थित संपर्क जानकारी
साइट.
· वेब पर स्ट्रैटस टेक्नोलॉजीजhttp://www.stratus.com>
· वेब पर वीओएस ओपन-सोर्स सॉफ्टवेयरhttp://ftp.stratus.com/pub/vos/vos.html>
EBCDIC प्लेटफार्म
v5.22 कोर पर्ल z/OS (पूर्व में OS/390) पर चलता है। सैद्धांतिक रूप से यह पर चल सकता है
AS/400 मिनी कंप्यूटर के साथ-साथ VM/ESA पर OS/400 के उत्तराधिकारी, और S/2000 के लिए BS390
मेनफ्रेम। ऐसे कंप्यूटर आंतरिक रूप से EBCDIC कैरेक्टर सेट (आमतौर पर कैरेक्टर कोड) का उपयोग करते हैं
OS/0037 के लिए आईडी 400 और S/1047 सिस्टम के लिए 390 या POSIX-BC सेट करें)।
इस अनुभाग के शेष भाग को अद्यतन करने की आवश्यकता हो सकती है, लेकिन हम नहीं जानते कि इसमें क्या कहना चाहिए। कृपया
को टिप्पणियाँ ईमेल करें [ईमेल संरक्षित] <mailto:[ईमेल संरक्षित]>.
मेनफ़्रेम पर पर्ल वर्तमान में "OS/390 के लिए यूनिक्स सिस्टम सेवाएँ" के अंतर्गत काम करता है
(पूर्व में OpenEdition के नाम से जाना जाता था), VM/ESA OpenEdition, या BS200 POSIX-BC सिस्टम (BS2000)
पर्ल 5.6 और उच्चतर में समर्थित है)। विवरण के लिए perlos390 देखें। ध्यान दें कि OS/400 के लिए
PASE में पर्ल 5.8.1/5.10.0 या बाद का एक पोर्ट भी है जो ASCII-आधारित है (जैसे
ILE के विपरीत जो EBCDIC-आधारित है), perlos400 देखें।
ओएस/2.5 के लिए यूएसएस के आर390 और वीएम/ईएसए के संस्करण 2.3 के अनुसार ये यूनिक्स उप-प्रणालियाँ नहीं हैं
का समर्थन "#!" स्क्रिप्ट मंगलाचरण के लिए शेबैंग ट्रिक। इसलिए, OS/390 और VM/ESA पर्ल पर
स्क्रिप्ट को निम्नलिखित सरल स्क्रिप्ट के समान हेडर के साथ निष्पादित किया जा सकता है:
: # पर्ल का उपयोग करें
eval 'exec /usr/local/bin/perl -S $0 ${1+"$@"}'
यदि 0;
#!/usr/local/bin/perl # वास्तव में बस एक टिप्पणी
प्रिंट करें "पर्ल की ओर से नमस्ते!\n";
OS/390 "#!" का समर्थन करेगा रिलीज़ 2.8 और उससे आगे में शेबैंग ट्रिक। "सिस्टम" को कॉल
और बैकटिक्स सभी S/390 सिस्टम पर POSIX शेल सिंटैक्स का उपयोग कर सकते हैं।
AS/400 पर, यदि PERL5 आपकी लाइब्रेरी सूची में है, तो आपको अपनी पर्ल स्क्रिप्ट को इसमें लपेटने की आवश्यकता हो सकती है
उन्हें इस प्रकार लागू करने के लिए एक सीएल प्रक्रिया:
शुरू
PGM(PERL5/PERL) PARM पर कॉल करें('/QOpenSys/hello.pl')
ईएनडीपीजीएम
यह पर्ल स्क्रिप्ट को लागू करेगा हैलो.pl QOpenSys फ़ाइल सिस्टम के मूल में। पर
"सिस्टम" या बैकटिक्स के लिए एएस/400 कॉल में सीएल सिंटैक्स का उपयोग होना चाहिए।
इन प्लेटफ़ॉर्म पर, ध्यान रखें कि EBCDIC कैरेक्टर सेट किस पर प्रभाव डाल सकता है
कुछ पर्ल फ़ंक्शंस के साथ होता है (जैसे कि "chr", "pack", "print", "printf", "ord", "sort",
"स्प्रिंटफ", "अनपैक"), साथ ही जैसे ऑपरेटरों का उपयोग करके ASCII स्थिरांक के साथ बिट-फ़िडलिंग
"^", "&" और "|", ASCII कंप्यूटरों के सॉकेट इंटरफेस से निपटने का उल्लेख नहीं है (देखें)।
"न्यूलाइन्स").
सौभाग्य से, मेनफ़्रेम के लिए अधिकांश वेब सर्वर "\n" का सही अनुवाद करेंगे
इसके ASCII समतुल्य के लिए निम्नलिखित कथन ("\r" यूनिक्स और z/OS दोनों के अंतर्गत समान है):
प्रिंट करें "सामग्री-प्रकार: text/html\r\n\r\n";
इनमें से कुछ प्लेटफ़ॉर्म पर $^O के मान शामिल हैं:
uname $^O $Config{'archname'}
--------------------------------------------
ओएस/390 ओएस390 ओएस390
ओएस400 ओएस400 ओएस400
पॉज़िक्स-बीसी पॉज़िक्स-बीसी बीएस2000-पॉज़िक्स-बीसी
यह निर्धारित करने के लिए कुछ सरल तरकीबें शामिल हो सकती हैं कि आप ईबीसीडीआईसी प्लेटफॉर्म पर चल रहे हैं या नहीं
निम्नलिखित में से कोई (शायद सभी):
यदि ("\t" eq "\005") { प्रिंट "EBCDIC यहां बोली जा सकती है!\n"; }
यदि (ord('A') == 193) {प्रिंट करें "EBCDIC यहां बोली जा सकती है!\n"; }
अगर (chr(169) eq 'z') {प्रिंट करें "EBCDIC यहां बोली जा सकती है!\n"; }
एक चीज़ जिस पर आप भरोसा नहीं करना चाहेंगे वह है विराम चिह्नों की EBCDIC एन्कोडिंग
चूंकि ये कोड पेज से कोड पेज में भिन्न हो सकते हैं (और एक बार आपका मॉड्यूल या स्क्रिप्ट अलग हो जाता है)।
ईबीसीडीआईसी के साथ काम करने की अफवाह है, लोग चाहेंगे कि यह सभी ईबीसीडीआईसी चरित्र सेटों के साथ काम करे)।
यह भी देखें:
· perlos390, perlos400, perlbs2000, perlebcdic।
· [ईमेल संरक्षित] यह सूची पोर्टिंग मुद्दों के साथ-साथ सामान्य मुद्दों पर भी चर्चा के लिए है
सभी ईबीसीडीआईसी पर्ल्स के लिए उपयोग के मुद्दे। "सब्सक्राइब पर्ल-एमवीएस" का संदेश मुख्य भाग भेजें
[ईमेल संरक्षित].
· एएस/400 पर्ल जानकारीhttp://as400.rochester.ibm.com/> साथ ही सीपीएएन पर भी
बंदरगाह/ निर्देशिका.
बलूत का फल RISC OS
क्योंकि एकोर्न यूनिक्स की तरह टेक्स्ट फ़ाइलों में "\012" के रूप में न्यूलाइन्स ("\n") के साथ ASCII का उपयोग करते हैं, और
क्योंकि यूनिक्स फ़ाइल नाम अनुकरण डिफ़ॉल्ट रूप से चालू है, संभवतः अधिकांश सरल स्क्रिप्ट चालू होंगी
"बॉक्स से बाहर" काम करें। मूल फ़ाइल सिस्टम मॉड्यूलर है, और व्यक्तिगत फ़ाइल सिस्टम हैं
केस-संवेदी या असंवेदनशील होने के लिए स्वतंत्र हैं, और आमतौर पर केस-संरक्षित होते हैं। कुछ देशी
फ़ाइल सिस्टम में नाम की लंबाई सीमा होती है, जिससे फ़ाइल और निर्देशिका के नाम चुपचाप काट दिए जाते हैं
फिट करने के लिए। स्क्रिप्ट्स को पता होना चाहिए कि मानक फ़ाइल सिस्टम में वर्तमान में नाम की लंबाई है
की सीमा 10 वर्ण, एक निर्देशिका में 77 आइटम तक, लेकिन अन्य फ़ाइल सिस्टम में नहीं हो सकते हैं
ऐसी सीमाएं लगाएं.
मूल फ़ाइलनाम प्रपत्र के होते हैं
फाइल सिस्टम#Special_Field::DiskName.$.Directory.Directory.File
जहां
स्पेशल_फ़ील्ड आमतौर पर मौजूद नहीं है, लेकिन इसमें शामिल हो सकता है। और $ .
फ़ाइल सिस्टम =~ m|[A-Za-z0-9_]|
DsicName =~ m|[A-Za-z0-9_/]|
$ रूट निर्देशिका का प्रतिनिधित्व करता है
. पथ विभाजक है
@ वर्तमान निर्देशिका है (प्रति फ़ाइल सिस्टम लेकिन मशीन वैश्विक)
^ मूल निर्देशिका है
निर्देशिका और फ़ाइल =~ m|[^\0- "\.\$\%\&:\@\\^\|\177]+|
डिफ़ॉल्ट फ़ाइल नाम अनुवाद मोटे तौर पर "tr|" है/.|./|;"
ध्यान दें कि ''ADFS::HardDisk.$.File'' 'ADFS::HardDisk.$.File'' नहीं है और दूसरा चरण
नियमित अभिव्यक्तियों में "$" का प्रक्षेप $ के विपरीत होगा। यदि स्क्रिप्ट नहीं हैं
सावधान।
अल्पविराम से अलग की गई खोज सूचियों वाले सिस्टम चर द्वारा निर्दिष्ट तार्किक पथ हैं
भी अनुमति दी गई; इसलिए "सिस्टम: मॉड्यूल" एक वैध फ़ाइल नाम है, और फ़ाइल सिस्टम उपसर्ग होगा
"सिस्टम$पाथ" के प्रत्येक अनुभाग के साथ "मॉड्यूल" जब तक कोई ऐसा नाम न बनाया जाए जो किसी ऑब्जेक्ट की ओर इशारा करता हो
डिस्क पर. एक नई फ़ाइल "सिस्टम:मॉड्यूल" में लिखने की अनुमति केवल तभी दी जाएगी जब "सिस्टम$पाथ"
इसमें एकल आइटम सूची शामिल है. फ़ाइल सिस्टम सिस्टम वेरिएबल्स का भी विस्तार करेगा
फ़ाइल नाम यदि कोण कोष्ठक में संलग्न हैं, तो " .मॉड्यूल" फ़ाइल की तलाश करेगा
"$ENV{'System$Dir'} . 'मॉड्यूल'"। इसका स्पष्ट निहितार्थ यह है पूरी तरह से योग्य
फ़ाइल नाम कर सकते हैं प्रारंभ साथ में "<>" और जब इनपुट के लिए "ओपन" का उपयोग किया जाता है तो इसे संरक्षित किया जाना चाहिए।
क्योंकि "।" एक निर्देशिका विभाजक के रूप में उपयोग में था और फ़ाइल नाम नहीं माना जा सकता था
10 वर्णों के बाद अद्वितीय, एकॉर्न ने अनुगामी ".c" को हटाने के लिए C कंपाइलर लागू किया
स्रोत कोड में निर्दिष्ट फ़ाइल नामों से ".h" ".s" और ".o" प्रत्यय और संबंधित को संग्रहीत करें
प्रत्यय के नाम पर उपनिर्देशिकाओं में फ़ाइलें। इसलिए फ़ाइलों का अनुवाद किया जाता है:
foo.h h.foo
C:foo.h C:h.foo (तार्किक पथ चर)
sys/os.h sys.h.os (सी कंपाइलर ग्रोक्स यूनिक्स-स्पीक)
10charname.c c.10charname
10charname.o o.10charname
11charname_.c c.11charname (यह मानते हुए कि फ़ाइल सिस्टम 10 पर छोटा हो जाता है)
यूनिक्स इम्यूलेशन लाइब्रेरी का फ़ाइल नामों का मूल में अनुवाद मानता है कि इस प्रकार का
अनुवाद आवश्यक है, और यह ज्ञात प्रत्ययों की उपयोगकर्ता-परिभाषित सूची की अनुमति देता है
इस प्रकार स्थानांतरित करें. यह पारदर्शी लग सकता है, लेकिन इन नियमों के साथ इस पर विचार करें
foo/bar/baz.h और फू/बार/एच/बाज़ दोनों मैप करते हैं foo.bar.h.baz, और वह "रीडिर" और "ग्लोब"
रिवर्स मैपिंग का अनुकरण करने का प्रयास नहीं कर सकते और न ही करते हैं। फ़ाइल नाम में अन्य "।" हैं
"/" में अनुवादित।
जैसा कि ऊपर बताया गया है, %ENV के माध्यम से एक्सेस किया गया वातावरण वैश्विक है, और सम्मेलन वैश्विक है
वह प्रोग्राम विशिष्ट वातावरण चर "प्रोग्राम$नाम" रूप के होते हैं। प्रत्येक
फ़ाइल सिस्टम एक वर्तमान निर्देशिका और वर्तमान फ़ाइल सिस्टम की वर्तमान निर्देशिका बनाए रखता है
विश्व का सबसे लोकप्रिय एंव वैश्विक वर्तमान निर्देशिका। नतीजतन, मिलनसार कार्यक्रम वर्तमान को नहीं बदलते हैं
निर्देशिका लेकिन पूर्ण पथनामों पर भरोसा करती है, और प्रोग्राम (और मेकफ़ाइल्स) यह नहीं मान सकते कि वे
एक चाइल्ड प्रक्रिया को जन्म दे सकता है जो वर्तमान निर्देशिका को प्रभावित किए बिना उसे बदल सकता है
माता-पिता (और उस मामले के लिए बाकी सभी)।
क्योंकि मूल ऑपरेटिंग सिस्टम फ़ाइलहैंडल वैश्विक हैं और वर्तमान में नीचे आवंटित किए गए हैं
255 से, 0 एक आरक्षित मान होने के साथ, यूनिक्स इम्यूलेशन लाइब्रेरी यूनिक्स का अनुकरण करती है
फ़ाइलहैंडल. नतीजतन, आप "STDIN", "STDOUT", या "STDERR" पास करने पर भरोसा नहीं कर सकते
तुम्हारे बच्चे।
प्रपत्र के फ़ाइल नाम व्यक्त करने की उपयोगकर्ताओं की इच्छा " .बार" कमांड लाइन पर
गैर-उद्धृत समस्याएँ भी पैदा करता है: "``" कमांड आउटपुट कैप्चर को अनुमान लगाने का खेल करना पड़ता है।
यह मानता है कि एक स्ट्रिंग "<[^<>]+\$[^<>]>" एक पर्यावरण चर का संदर्भ है,
जबकि "<" या ">" से जुड़ी कोई भी चीज़ पुनर्निर्देशन है, और आम तौर पर 99% होने का प्रबंधन करती है
सही। बेशक, समस्या यह बनी हुई है कि स्क्रिप्ट किसी भी यूनिक्स उपकरण पर भरोसा नहीं कर सकती हैं
उपलब्ध है, या कि पाए गए किसी भी उपकरण में यूनिक्स-जैसे कमांड लाइन तर्क हैं।
एक्सटेंशन और XS, सैद्धांतिक रूप से, मुफ़्त टूल का उपयोग करके किसी भी व्यक्ति द्वारा निर्माण योग्य हैं। व्यवहार में, बहुत से
ऐसा न करें, क्योंकि एकॉर्न प्लेटफ़ॉर्म के उपयोगकर्ता बाइनरी वितरण के आदी हैं। मेकमेकर करता है
चलाएं, लेकिन मेकमेकर की मेकफ़ाइल्स के साथ वर्तमान में कोई उपलब्ध मेक नहीं है; भले ही और कब
इसे ठीक किया जाना चाहिए, यूनिक्स जैसे शेल की कमी से मेकफ़ाइल में समस्याएँ पैदा होंगी
नियम, विशेषकर "सीडी एसडीबीएम && मेक ऑल" फ़ॉर्म की पंक्तियाँ, और उद्धरण का उपयोग करने वाली कोई भी चीज़।
"RISC OS" ऑपरेटिंग सिस्टम का उचित नाम है, लेकिन $^O में मान "riscos" है
(क्योंकि हमें चिल्लाना पसंद नहीं है)।
अन्य पर्ल्स
पर्ल को कई प्लेटफ़ॉर्म पर पोर्ट किया गया है जो सूचीबद्ध किसी भी श्रेणी में फिट नहीं होते हैं
ऊपर। कुछ, जैसे AmigaOS, QNX, प्लान 9 और VOS को अच्छी तरह से एकीकृत किया गया है
मानक पर्ल स्रोत कोड किट। आपको देखने की आवश्यकता हो सकती है बंदरगाह/ सीपीएएन पर निर्देशिका के लिए
जानकारी, और संभवतः बाइनरी, जैसे: एओएस, अटारी एसटी, लिंक्सोस, रिस्कोस,
नोवेल नेटवेयर, टेंडेम गार्जियन, इत्यादि (हां, हम जानते हैं कि इनमें से कुछ OSes गिर सकते हैं
यूनिक्स श्रेणी के अंतर्गत, लेकिन हम एक मानक निकाय नहीं हैं।)
"अन्य" श्रेणी में कुछ अनुमानित ऑपरेटिंग सिस्टम नाम और उनके $^O मान
शामिल हैं:
ओएस $^O $Config{'archname'}
------------------------------------------
अमीगा डॉस अमीगाओस एम68के-एमिगोस
इन्हें भी देखें:
· अमिगा, README.अमीगा (पर्लामिगा के रूप में स्थापित)।
· नोवेल नेटवेयर के लिए एक निःशुल्क पर्ल5-आधारित PERL.NLM पूर्व-संकलित बाइनरी में उपलब्ध है
स्रोत कोड प्रपत्र सेhttp://www.novell.com/> साथ ही सीपीएएन से भी।
· योजना 9, README.योजना9
FUNCTION कार्यान्वयन
नीचे ऐसे कार्य सूचीबद्ध हैं जो या तो पूरी तरह से लागू नहीं किए गए हैं या फिर कर दिए गए हैं
विभिन्न प्लेटफार्मों पर अलग-अलग तरीके से लागू किया गया। प्रत्येक विवरण के बाद, में होगा
कोष्ठक, प्लेटफ़ॉर्म की एक सूची जिस पर विवरण लागू होता है।
सूची अधूरी हो सकती है, या कुछ स्थानों पर गलत भी हो सकती है। जब संदेह हो, तो परामर्श लें
पर्ल स्रोत वितरण में प्लेटफ़ॉर्म-विशिष्ट README फ़ाइलें, और कोई अन्य
किसी दिए गए पोर्ट के साथ दस्तावेज़ीकरण संसाधन।
इसके अलावा, सावधान रहें कि यूनिक्स-ईश प्रणालियों में भी भिन्नताएँ हैं।
कई कार्यों के लिए, आप "कॉन्फिग" से डिफ़ॉल्ट रूप से निर्यात किए गए %कॉन्फिग को क्वेरी भी कर सकते हैं।
मापांक। उदाहरण के लिए, यह जाँचने के लिए कि प्लेटफ़ॉर्म पर "lstat" कॉल है या नहीं, जाँचें
$कॉन्फिग{d_lstat}. उपलब्ध चरों के पूर्ण विवरण के लिए कॉन्फ़िग देखें।
वर्णमाला लिस्टिंग of पर्ल कार्य
-X "-w" केवल पढ़ने योग्य फ़ाइल विशेषता (FILE_ATTRIBUTE_READONLY) का निरीक्षण करता है, जो
यह निर्धारित करता है कि क्या निर्देशिका को हटाया जा सकता है, न कि यह कि इसे लिखा जा सकता है या नहीं।
निर्देशिकाओं में हमेशा पढ़ने और लिखने की पहुंच होती है जब तक कि विवेकाधीन व्यक्ति द्वारा अस्वीकार नहीं किया जाता है
अभिगम नियंत्रण सूचियाँ (डीएसीएल)। (Win32)
"-r", "-w", "-x", और "-o" बताते हैं कि फ़ाइल पहुंच योग्य है या नहीं, जो नहीं हो सकती है
यूआईसी-आधारित फ़ाइल सुरक्षा को प्रतिबिंबित करें। (वीएमएस)
एक खुली फ़ाइल पर नाम से "-s" डिस्क पर आरक्षित स्थान को वापस कर देगा
वर्तमान सीमा. एक खुले फ़ाइलहैंडल पर "-s" वर्तमान आकार लौटाता है।
(आरआईएससी ओएस)
"-R", "-W", "-X", "-O" "-r", "-w", "-x", "-o" से अप्रभेद्य हैं। (Win32,
वीएमएस, आरआईएससी ओएस)
"-g", "-k", "-l", "-u", "-A" विशेष रूप से सार्थक नहीं हैं। (Win32, वीएमएस,
जोखिम ओएस)
"-पी" विशेष रूप से सार्थक नहीं है। (वीएमएस, आरआईएससी ओएस)
यदि किसी स्पष्ट निर्देशिका के बिना डिवाइस विनिर्देश पारित किया गया है तो "-d" सत्य है। (वीएमएस)
"-x" (या "-X") यह निर्धारित करता है कि फ़ाइल निष्पादन योग्य प्रत्ययों में से किसी एक में समाप्त होती है या नहीं। "-एस"
अर्थहीन है. (Win32)
"-x" (या "-X") यह निर्धारित करता है कि किसी फ़ाइल में निष्पादन योग्य फ़ाइल प्रकार है या नहीं। (आरआईएससी ओएस)
टाइमर का उपयोग करके अलार्म का अनुकरण किया जाता है जिसे पर्ल जब भी चाहे स्पष्ट रूप से पोल किया जाना चाहिए
"सुरक्षित सिग्नल" भेजें और इसलिए ब्लॉकिंग सिस्टम कॉल को बाधित नहीं कर सकते।
(विन32)
atan2 विभिन्न सीपीयू, गणित पुस्तकालयों, कंपाइलरों और मानकों के मुद्दों के कारण, परिणाम
"atan2()" के लिए उपरोक्त किसी भी संयोजन के आधार पर भिन्न हो सकता है। पर्ल प्रयास
लौटाए गए परिणामों के लिए ओपन ग्रुप/आईईईई मानकों के अनुरूप होना
"atan2()", लेकिन यदि सिस्टम पर्ल चल रहा है तो समस्या को बल नहीं दे सकता है
यह। (ट्रू64, एचपी-यूएक्स 10.20)
"atan2()" के लिए मानकों का वर्तमान संस्करण यहां उपलब्ध है
<http://www.opengroup.org/onlinepubs/009695399/functions/atan2.html>.
बिनमोड अर्थहीन. (आरआईएससी ओएस)
फ़ाइल को फिर से खोलता है और पॉइंटर को पुनर्स्थापित करता है; यदि फ़ंक्शन विफल हो जाता है, तो अंतर्निहित फ़ाइलहैंडल हो सकता है
बंद है, या सूचक भिन्न स्थिति में हो सकता है। (वीएमएस)
"बताओ" द्वारा लौटाया गया मान कॉल के बाद और फ़ाइलहैंडल पर प्रभावित हो सकता है
बहाया जा सकता है. (Win32)
chmod केवल "मालिक" पढ़ने-लिखने की पहुंच, "समूह" और "अन्य" बिट्स को बदलने के लिए अच्छा है
अर्थहीन. (Win32)
केवल "स्वामी" और "अन्य" पढ़ने-लिखने की पहुंच को बदलने के लिए अच्छा है। (आरआईएससी ओएस)
एक्सेस अनुमतियाँ VOS एक्सेस-कंट्रोल सूची परिवर्तनों पर मैप की जाती हैं। (वीओएस)
वास्तविक अनुमतियाँ सेट सिस्टम में "CYGWIN" के मान पर निर्भर करती हैं
पर्यावरण सेटिंग्स. (सिगविन)
कुछ स्थानों पर निष्पादन बिट सेट करना (आम तौर पर)। / एसडी कार्ड) सत्य लौटेगा लेकिन
वास्तव में बिट सेट नहीं है. (एंड्रॉयड)
चाउन लागू नहीं किया गया। (Win32, प्लान 9, RISC OS)
कुछ नहीं करता, लेकिन असफल नहीं होगा। (Win32)
थोड़ा फंकी, क्योंकि VOS की स्वामित्व की धारणा थोड़ी फंकी (VOS) है।
क्रोट लागू नहीं किया गया. (Win32, VMS, प्लान 9, RISC OS, VOS)
यदि पर्ल बनाते समय लाइब्रेरी या स्रोत उपलब्ध नहीं कराया गया तो क्रिप्ट उपलब्ध नहीं हो सकता है।
(विन32)
लागू नहीं किया गया। (एंड्रॉयड)
dbmclose
लागू नहीं किया गया। (वीएमएस, योजना 9, वीओएस)
dbmopen लागू नहीं किया गया। (वीएमएस, योजना 9, वीओएस)
डंप उपयोगी नहीं है. (आरआईएससी ओएस)
समर्थित नहीं। (सिगविन, Win32)
वीएमएस डीबगर को आमंत्रित करता है। (वीएमएस)
अप्रत्यक्ष ऑब्जेक्ट सिंटैक्स ("निष्पादन कार्यक्रम सूची") के उपयोग के बिना निष्पादन "निष्पादन सूची"।
यदि पहला "स्पॉन ()" विफल हो जाता है, तो शेल को फिर से आज़माने का प्रयास करें। (Win32)
कुछ प्लेटफ़ॉर्म पर स्वचालित रूप से आउटपुट हैंडल फ्लश नहीं होता है। (सनओएस, सोलारिस,
एचपी-यूएक्स)
समर्थित नहीं। (सिम्बियन ओएस)
एग्जिट मैपिंग द्वारा यूनिक्स "एग्जिट ()" (जो त्रुटि को इंगित करने के लिए "एग्जिट 1" पर विचार करता है) का अनुकरण करता है
1 से "SS$_ABORT" (44)। इस व्यवहार को व्यावहारिक उपयोग के साथ ओवरराइड किया जा सकता है
vmsish 'exit'"। CRTL के "exit()" फ़ंक्शन की तरह, "exit 0" को भी मैप किया गया है
"SS$_NORMAL" की निकास स्थिति (1); इस मैपिंग को ओवरराइड नहीं किया जा सकता. कोई और
"exit()" के तर्क का उपयोग सीधे पर्ल की निकास स्थिति के रूप में किया जाता है। वीएमएस पर, जब तक कि
भविष्य में POSIX_EXIT मोड सक्षम है, निकास कोड हमेशा एक वैध VMS निकास होना चाहिए
कोड और सामान्य संख्या नहीं. जब POSIX_EXIT मोड सक्षम होता है, तो एक सामान्य
संख्या को C लाइब्रेरी _POSIX_EXIT मैक्रो के साथ संगत विधि में एन्कोड किया जाएगा
ताकि इसे अन्य प्रोग्रामों द्वारा डिकोड किया जा सके, विशेष रूप से C में लिखे गए प्रोग्रामों द्वारा
जीएनवी पैकेज. (वीएमएस)
"exit()" फ़ाइल पॉइंटर्स को रीसेट करता है, जो चाइल्ड प्रोसेस से कॉल करने पर एक समस्या है
("BEGIN" में ("fork()" द्वारा निर्मित)। समाधान "POSIX::_exit" का उपयोग करना है।
(सोलारिस)
बाहर निकलें जब तक कि $Config{archname} =~ /\bsolaris\b/;
POSIX और POSIX की आवश्यकता है::_बाहर जाएं; (0)
एफसीएनटीएल लागू नहीं किया गया। (Win32)
वीएमएस के संस्करण के आधार पर कुछ फ़ंक्शन उपलब्ध हैं। (वीएमएस)
झुंड लागू नहीं किया गया (वीएमएस, आरआईएससी ओएस, वीओएस)।
कांटा लागू नहीं किया गया. (अमिगाओएस, आरआईएससी ओएस, वीएमएस)
एकाधिक दुभाषियों का उपयोग करके अनुकरण किया गया। पर्लफ़ॉर्क देखें. (Win32)
कुछ प्लेटफ़ॉर्म पर स्वचालित रूप से आउटपुट हैंडल फ्लश नहीं होता है। (सनओएस, सोलारिस,
एचपी-यूएक्स)
गेटलॉगिन
लागू नहीं किया गया। (आरआईएससी ओएस)
getpgrp लागू नहीं किया गया। (Win32, VMS, RISC OS)
गेटपिड लागू नहीं किया गया। (Win32, RISC ओएस)
प्राथमिकता प्राप्त करें
लागू नहीं किया गया। (Win32, VMS, RISC OS, VOS)
गेटपवनाम
लागू नहीं किया गया। (Win32)
उपयोगी नहीं। (आरआईएससी ओएस)
गेटग्रनाम
लागू नहीं किया गया। (Win32, VMS, RISC OS)
getnetbyname
लागू नहीं किया गया। (एंड्रॉइड, Win32, प्लान 9)
गेटपव्यूड
लागू नहीं किया गया। (Win32)
उपयोगी नहीं। (आरआईएससी ओएस)
getgrgid
लागू नहीं किया गया। (Win32, VMS, RISC OS)
getnetbyaddr
लागू नहीं किया गया। (एंड्रॉइड, Win32, प्लान 9)
protobynumber प्राप्त करें
लागू नहीं किया गया। (एंड्रॉयड)
getservbyport
getpwent
लागू नहीं किया गया। (एंड्रॉइड, Win32)
getgrant
लागू नहीं किया गया। (एंड्रॉइड, Win32, VMS)
gethostbyname
"gethostbyname('localhost')" हर जगह काम नहीं करता: आपको इसका उपयोग करना पड़ सकता है
"gethostbyname('127.0.0.1')"। (आईरिक्स 5)
gethostent
लागू नहीं किया गया। (Win32)
getnetent
लागू नहीं किया गया। (एंड्रॉइड, Win32, प्लान 9)
getprotoent
लागू नहीं किया गया। (एंड्रॉइड, Win32, प्लान 9)
getservent
लागू नहीं किया गया। (Win32, योजना 9)
सीकडिर लागू नहीं किया गया। (एंड्रॉयड)
sethostent
लागू नहीं किया गया। (एंड्रॉइड, Win32, प्लान 9, RISC OS)
setnetent
लागू नहीं किया गया। (Win32, प्लान 9, RISC OS)
setprotoent
लागू नहीं किया गया। (एंड्रॉइड, Win32, प्लान 9, RISC OS)
setservent
लागू नहीं किया गया। (योजना 9, विन32, आरआईएससी ओएस)
ख़त्म हो गया
लागू नहीं किया गया। (Win32)
या तो क्रियान्वित नहीं किया गया या कोई काम नहीं किया गया। (एंड्रॉयड)
एंडग्रेंट
लागू नहीं किया गया। (एंड्रॉइड, आरआईएससी ओएस, वीएमएस, Win32)
एंडहोस्टेंट
लागू नहीं किया गया। (एंड्रॉइड, Win32)
एंडनेटेंट
लागू नहीं किया गया। (एंड्रॉइड, Win32, प्लान 9)
एंडप्रोटोएंट
लागू नहीं किया गया। (एंड्रॉइड, Win32, प्लान 9)
एंडसर्वेंट
लागू नहीं किया गया। (योजना 9, विन32)
getockopt सॉकेट, लेवल, OPTNAME
लागू नहीं किया गया। (योजना 9)
ग्लोब यह ऑपरेटर अधिकांश प्लेटफ़ॉर्म पर "फ़ाइल::ग्लोब" एक्सटेंशन के माध्यम से कार्यान्वित किया जाता है।
पोर्टेबिलिटी जानकारी के लिए फ़ाइल::ग्लोब देखें।
gmtime सिद्धांत रूप में, "gmtime()" -2**63 से 2**63-1 तक विश्वसनीय है। हालाँकि, क्योंकि काम
कार्यान्वयन में चारों ओर फ़्लोटिंग पॉइंट नंबरों का उपयोग होता है, यह बन जाएगा
जैसे-जैसे समय बड़ा होता जाता है, गलत होता जाता है। यह एक बग है और इसे इसमें ठीक कर दिया जाएगा
भविष्य।
वीओएस पर, समय मान 32-बिट मात्राएँ हैं।
ioctl फ़ाइलहैंडल, फ़ंक्शन, स्केलर
लागू नहीं किया गया। (वीएमएस)
केवल सॉकेट हैंडल के लिए उपलब्ध है, और यह वही करता है जो "ioctlsocket()" कॉल करता है
विंसॉक एपीआई करता है। (Win32)
केवल सॉकेट हैंडल के लिए उपलब्ध है। (आरआईएससी ओएस)
किल लागू नहीं किया गया है, इसलिए दाग जाँच के लिए उपयोगी नहीं है। (आरआईएससी ओएस)
"kill()" में "raise()" का शब्दार्थ नहीं है, अर्थात यह कोई संकेत नहीं भेजता है
पहचानी गई प्रक्रिया जैसे यह यूनिक्स प्लेटफ़ॉर्म पर होती है। इसके बजाय "kill($sig, $pid)"
$pid द्वारा पहचानी गई प्रक्रिया को समाप्त करता है, और इसे निकास के साथ तुरंत बाहर कर देता है
स्थिति $sig. यूनिक्स की तरह, यदि $sig 0 है और निर्दिष्ट प्रक्रिया मौजूद है, तो यह
वास्तव में इसे समाप्त किए बिना सत्य लौटाता है। (Win32)
"kill(-9, $pid)" $pid द्वारा निर्दिष्ट प्रक्रिया को समाप्त कर देगा और सभी को पुनरावर्ती रूप से समाप्त कर देगा
इसके स्वामित्व वाली बाल प्रक्रियाएँ। यह यूनिक्स शब्दार्थ से भिन्न है, जहां
सिग्नल को प्रक्रिया के समान प्रक्रिया समूह की सभी प्रक्रियाओं तक पहुंचाया जाएगा
$pid द्वारा निर्दिष्ट। (Win32)
0 या ऋणात्मक संख्याओं की प्रक्रिया पहचान संख्या के लिए समर्थित नहीं है। (वीएमएस)
लिंक लागू नहीं किया गया. (आरआईएससी ओएस, वीओएस)
लिंक संख्या अपडेट नहीं की गई क्योंकि हार्ड लिंक उतने कठिन नहीं हैं (वे क्रमबद्ध हैं
कठोर और नरम कड़ियों के बीच का आधा रास्ता)। (अमिगाओएस)
हार्ड लिंक केवल NTFS के अंतर्गत Win32 पर लागू किए जाते हैं। वे मूल रूप से समर्थित हैं
Windows 2000 और बाद के संस्करण पर. विंडोज़ एनटी पर इन्हें विंडोज़ का उपयोग करके कार्यान्वित किया जाता है
POSIX सबसिस्टम समर्थन और पर्ल प्रक्रिया के लिए प्रशासक या बैकअप की आवश्यकता होगी
हार्ड लिंक बनाने के लिए ऑपरेटर को विशेषाधिकार।
64 बिट ओपनवीएमएस 8.2 और बाद के संस्करण पर उपलब्ध है। (वीएमएस)
स्थानीय समय
स्थानीय समय() इसकी सीमा "gmtime" के समान है, लेकिन क्योंकि समय क्षेत्र के नियम बदल जाते हैं
ऐतिहासिक और भविष्य के समय के लिए सटीकता कम हो सकती है लेकिन आमतौर पर इससे अधिक नहीं
एक घंटा।
lstat लागू नहीं किया गया. (आरआईएससी ओएस)
रिटर्न मान (विशेषकर डिवाइस और इनोड के लिए) फर्जी हो सकते हैं। (Win32)
msgctl
संदेश प्राप्त करें
संदेश
msgrcv लागू नहीं किया गया. (एंड्रॉइड, Win32, VMS, प्लान 9, RISC OS, VOS)
"|-" और "-|" के लिए खुला खोलें असमर्थित हैं. (Win32, RISC ओएस)
किसी प्रक्रिया को खोलने से कुछ प्लेटफ़ॉर्म पर आउटपुट हैंडल स्वचालित रूप से फ़्लश नहीं होते हैं।
(सनओएस, सोलारिस, एचपी-यूएक्स)
रीडलिंक
लागू नहीं किया गया। (Win32, VMS, RISC OS)
नाम बदलें विभिन्न तार्किक वॉल्यूम पर निर्देशिकाओं के बीच निर्देशिकाओं को स्थानांतरित नहीं किया जा सकता। (Win32)
रिवाइंडिर
निर्देशिका स्ट्रीम को दोबारा पढ़ने के लिए "readdir()" का कारण नहीं बनेगा। प्रविष्टियाँ पहले से ही
"रिवाइंडडिर()" कॉल कैश से दोबारा वापस आने से पहले पढ़ें
बफ़र. (Win32)
केवल सॉकेट पर लागू का चयन करें। (विन32, वीएमएस)
केवल सॉकेट पर विश्वसनीय. (आरआईएससी ओएस)
ध्यान दें कि "सेलेक्ट फ़ाइलहैंडल" फॉर्म आम तौर पर पोर्टेबल होता है।
semctl
semget
सेमॉप लागू नहीं किया गया. (एंड्रॉइड, Win32, VMS, RISC OS)
setgrent
लागू नहीं किया गया। (एंड्रॉइड, वीएमएस, Win32, RISC ओएस)
setpgrp लागू नहीं किया गया। (Win32, VMS, RISC OS, VOS)
प्राथमिकता दर्ज करें
लागू नहीं किया गया। (Win32, VMS, RISC OS, VOS)
सेटपवेंट
लागू नहीं किया गया। (एंड्रॉइड, Win32, RISC ओएस)
setsockopt
लागू नहीं किया गया। (योजना 9)
shmctl
shmget
shmread
shmwrite
लागू नहीं किया गया। (एंड्रॉइड, Win32, VMS, RISC OS)
स्लीप को सिंक्रोनाइज़ेशन फ़ंक्शंस का उपयोग करके अनुकरण किया जाता है ताकि इसे बाधित किया जा सके
"अलार्म()", और अधिकतम 4294967 सेकंड तक सीमित, लगभग 49 दिन।
(विन32)
सॉकेटमार्क
सॉकेट फ़ंक्शंस में अपेक्षाकृत हाल ही में जोड़ा गया, यहां तक कि लागू नहीं किया जा सकता है
यूनिक्स प्लेटफार्म.
सॉकेट जोड़ी
लागू नहीं किया गया। (आरआईएससी ओएस)
64 बिट ओपनवीएमएस 8.2 और बाद के संस्करण पर उपलब्ध है। (वीएमएस)
स्टेट प्लेटफ़ॉर्म जिनमें rdev, blksize या ब्लॉक नहीं हैं, वे इन्हें '', इसलिए' के रूप में लौटाएंगे
इन क्षेत्रों की संख्यात्मक तुलना या हेरफेर 'संख्यात्मक नहीं' का कारण बन सकता है
चेतावनियाँ।
यूएफएस (मैक ओएस एक्स) पर सीटाइम समर्थित नहीं है।
ctime इनोड परिवर्तन समय (Win32) के बजाय निर्माण समय है।
डिवाइस और इनोड सार्थक नहीं हैं। (Win32)
डिवाइस और इनोड आवश्यक रूप से विश्वसनीय नहीं हैं। (वीएमएस)
mtime, atime और ctime सभी अंतिम संशोधन समय लौटाते हैं। डिवाइस और इनोड
आवश्यक रूप से विश्वसनीय नहीं हैं. (आरआईएससी ओएस)
dev, rdev, blksize, और ब्लॉक उपलब्ध नहीं हैं। इनोड सार्थक नहीं है और
एक ही फ़ाइल पर स्टेट कॉल के बीच अंतर होगा। (ओएस2)
साइगविन के कुछ संस्करण "स्टेट("फू")" करते समय और यदि यह नहीं मिल रहा है तो हो सकता है
"stat("foo.exe")" का प्रयास करें (सिगविन)
Win32 पर "stat()" को लिंक संख्या निर्धारित करने और अद्यतन करने के लिए फ़ाइल खोलने की आवश्यकता है
विशेषताएँ जो हार्ड लिंक के माध्यम से बदली गई होंगी। सेटिंग
"${^WIN32_SLOPPY_STAT}" को सही मूल्य पर निष्पादित न करने से "stat()" गति बढ़ जाती है
संचालन। (Win32)
सिम्लिंक लागू नहीं किया गया. (Win32, RISC ओएस)
64 बिट वीएमएस 8.3 पर कार्यान्वित। वीएमएस के लिए प्रतीकात्मक लिंक का यूनिक्स में होना आवश्यक है
सिंटैक्स यदि इसका उद्देश्य वैध पथ को हल करना है।
सिस्कल लागू नहीं किया गया। (Win32, VMS, RISC OS, VOS)
sysopen पारंपरिक "0", "1", और "2" मोड अलग-अलग संख्यात्मक के साथ कार्यान्वित किए जाते हैं
कुछ प्रणालियों पर मान. "Fcntl" द्वारा निर्यात किए गए झंडे (O_RDONLY, O_WRONLY,
हालाँकि O_RDWR) को हर जगह काम करना चाहिए। (मैक ओएस, ओएस/390)
सिस्टम एक अनुकूलन के रूप में, $ENV{PERL5SHELL} में निर्दिष्ट कमांड शेल को कॉल नहीं कर सकता है।
"सिस्टम(1, @args)" एक बाहरी प्रक्रिया को जन्म देता है और तुरंत अपनी प्रक्रिया वापस कर देता है
डिज़ाइनकर्ता, इसके समाप्त होने की प्रतीक्षा किए बिना। रिटर्न वैल्यू का उपयोग किया जा सकता है
बाद में "प्रतीक्षा" या "प्रतीक्षापिड" में। एक उपप्रक्रिया को "स्पॉन ()" करने में विफलता है
$? सेट करके दर्शाया गया है? से "255 << 8"। $? यूनिक्स के साथ संगत तरीके से सेट किया गया है
(अर्थात उपप्रक्रिया की निकास स्थिति ""$? " 8">> द्वारा प्राप्त की जाती है, जैसा कि इसमें वर्णित है
दस्तावेज़ीकरण)। (Win32)
मेटाएक्टर्स को संसाधित करने के लिए कोई शेल नहीं है, और मूल मानक पास करना है
उत्पन्न प्रोग्राम के लिए कमांड लाइन को "\n" "\r" या "\0" द्वारा समाप्त किया जाता है। पुनर्निर्देशन
जैसे कि "> foo" स्पॉन्ड की रन टाइम लाइब्रेरी द्वारा (यदि बिल्कुल भी) किया जाता है
कार्यक्रम. "प्रणाली" सूची यूनिक्स इम्यूलेशन लाइब्रेरी के "कार्यकारी" इम्यूलेशन को कॉल करेगा,
जो कि लागू stdin, stdout, stderr का अनुकरण प्रदान करने का प्रयास करता है
माता-पिता, बशर्ते कि बच्चा प्रोग्राम अनुकरण के संगत संस्करण का उपयोग करे
पुस्तकालय। अदिश मूल कमांड लाइन को डायरेक्ट कॉल करेगा और ऐसा कोई अनुकरण नहीं होगा
एक चाइल्ड यूनिक्स प्रोग्राम मौजूद होगा। लाभ मर्जी अलग होना। (आरआईएससी ओएस)
अप्रत्यक्ष ऑब्जेक्ट सिंटैक्स के उपयोग के बिना "सिस्टम सूची" ("सिस्टम प्रोग्राम सूची")
यदि पहला "स्पॉन ()" विफल हो जाता है, तो शेल को फिर से आज़माना पड़ सकता है। (Win32)
कुछ प्लेटफ़ॉर्म पर स्वचालित रूप से आउटपुट हैंडल फ्लश नहीं होता है। (सनओएस, सोलारिस,
एचपी-यूएक्स)
रिटर्न वैल्यू POSIX-जैसा है (8 बिट्स द्वारा स्थानांतरित), जो केवल जगह की अनुमति देता है
मूल 32-बिट स्थिति कोड की गंभीरता बिट्स से प्राप्त एक बना-बनाया मूल्य
(जब तक कि इसे "vmsish 'status' का उपयोग करें" द्वारा ओवरराइड न किया जाए)। यदि मूल स्थिति कोड एक है
जिसमें POSIX मान एन्कोड किया गया है, उसे निकालने के लिए POSIX मान को डीकोड किया जाएगा
अपेक्षित निकास मूल्य. अधिक जानकारी के लिए "$?" देखें perlvms में. (वीएमएस)
टेलडिर लागू नहीं किया गया। (एंड्रॉयड)
"संचयी" समय फर्जी होगा। Windows NT या Windows के अलावा किसी अन्य चीज़ पर
2000, "सिस्टम" समय फर्जी होगा, और "उपयोगकर्ता" समय वास्तव में लौटाया गया समय है
सी रनटाइम लाइब्रेरी में "घड़ी ()" फ़ंक्शन द्वारा। (Win32)
उपयोगी नहीं। (आरआईएससी ओएस)
काट-छांट
लागू नहीं किया गया। (वीएमएस के पुराने संस्करण)
केवल समान-या-छोटी लंबाई तक काट-छाँट। (वीओएस)
यदि फ़ाइलहैंडल की आपूर्ति की जाती है, तो उसे लिखने योग्य होना चाहिए और एपेंड मोड में खोला जाना चाहिए (अर्थात्,
"open(FH, '>>filename')" या "sysopen(FH,...,O_APPEND|O_RDWR)" का उपयोग करें। यदि कोई फ़ाइलनाम
आपूर्ति की जाती है, इसे अन्यत्र खुला नहीं रखा जाना चाहिए। (Win32)
umask जहां अनुपलब्ध हो वहां अपरिभाषित रिटर्न देता है।
"उमास्क" काम करता है लेकिन सही अनुमतियाँ तभी सेट की जाती हैं जब फ़ाइल अंततः तैयार हो जाती है
बंद किया हुआ। (अमिगाओएस)
यूटाइम केवल संशोधन समय अद्यतन किया जाता है। (वीएमएस, आरआईएससी ओएस)
अपेक्षा के अनुरूप व्यवहार नहीं कर पाएंगे. व्यवहार C रनटाइम लाइब्रेरी पर निर्भर करता है
"utime()" का कार्यान्वयन, और फ़ाइल सिस्टम का उपयोग किया जा रहा है। FAT फ़ाइल सिस्टम
आम तौर पर "एक्सेस टाइम" फ़ील्ड का समर्थन नहीं करता है, और यह टाइमस्टैम्प को सीमित कर सकता है
दो सेकंड की ग्रैन्युलैरिटी. (Win32)
प्रतीक्षा
waitpid का उपयोग केवल उत्पन्न प्रक्रियाओं के लिए लौटाए गए प्रोसेस हैंडल पर ही लागू किया जा सकता है
"सिस्टम(1, ...)" या "फोर्क()" के साथ बनाई गई छद्म प्रक्रियाएं। (Win32)
उपयोगी नहीं। (आरआईएससी ओएस)
समर्थित प्लेटफार्म
निम्नलिखित प्लेटफ़ॉर्म पर्ल 5.12 के निर्माण के लिए जाने जाते हैं (अप्रैल 2010 तक, इसकी रिलीज़ तिथि)
<पर उपलब्ध मानक स्रोत कोड वितरण सेhttp://www.cpan.org/src>
लिनक्स (x86, ARM, IA64)
HP-UX
AIX
Win32
Windows 2000
Windows XP
विंडोज सर्वर 2003
Windows Vista
विंडोज सर्वर 2008
Windows 7
Cygwin
कुछ परीक्षण विफल होने के लिए जाने जाते हैं:
· ext/XS-APItes/t/call_checker.t - देख
· dist/I18N-Collate/t/I18N-Collate.t
· ext/Win32CORE/t/win32core.t - हाल के साइबरविन इंस्टॉल पर विफल हो सकता है।
सोलारिस (x86, SPARC)
ओपन VMS
अल्फ़ा (7.2 और बाद का)
I64 (8.2 और बाद में)
सिम्बियन
NetBSD
FreeBSD
डेबियन जीएनयू / kFreeBSD
हाइकू
इरिक्स (6.5. और क्या?)
OpenBSD
ड्रैगनफ्लाई बीएसडी
आधी रात बी.एस.डी
क्यूएनएक्स न्यूट्रिनो आरटीओएस (6.5.0)
मिरओएस बीएसडी
स्ट्रैटस ओपनवीओएस (17.0 या बाद का)
चेतावनियां:
time_t समस्याएँ जिन्हें ठीक किया जा सकता है या नहीं भी
सिम्बियन (श्रृंखला 60 वी3, 3.2 और 5 - और क्या?)
स्ट्रैटस वीओएस / ओपनवीओएस
AIX
एंड्रॉयड
फ्रीमिंट
पर्ल अब FreeMiNT/अटारी के साथ निर्माण कर रहा है। यह कुछ परीक्षणों में विफल रहता है, इसके लिए कुछ की आवश्यकता है
जाँच पड़ताल।
FreeMiNT पोर्ट लोड करने योग्य मॉड्यूल क्षमताओं के लिए GNU dld का उपयोग करता है। तो सुनिश्चित करें कि आपके पास है
वह लाइब्रेरी पर्ल बनाते समय स्थापित की गई थी।
EOL प्लेटफार्म
(पर्ल 5.20)
निम्नलिखित प्लेटफ़ॉर्म पर्ल के पिछले संस्करण द्वारा समर्थित थे, लेकिन हैं
5.20 तक पर्ल के स्रोत कोड से आधिकारिक तौर पर हटा दिया गया:
एटी एंड टी 3बी1
(पर्ल 5.14)
निम्नलिखित प्लेटफ़ॉर्म 5.10 तक समर्थित थे। उन्होंने अभी भी 5.12 में काम किया होगा,
लेकिन 5.14 के लिए सहायक कोड हटा दिया गया है:
Windows 95
Windows 98
Windows ME
विंडोज़ एनटी4
(पर्ल 5.12)
निम्नलिखित प्लेटफ़ॉर्म पर्ल के पिछले संस्करण द्वारा समर्थित थे, लेकिन हैं
5.12 तक पर्ल के स्रोत कोड से आधिकारिक तौर पर हटा दिया गया:
अटारी मिंट
अपोलो डोमेन/ओएस
एप्पल मैक ओएस 8/9
टेनन मैकटेन
समर्थित प्लेटफार्म (पर्ल 5.8)
जुलाई 2002 (पर्ल रिलीज़ 5.8.0) तक, निम्नलिखित प्लेटफ़ॉर्म पर्ल का निर्माण करने में सक्षम थे
<पर उपलब्ध मानक स्रोत कोड वितरण सेhttp://www.cpan.org/src/>
AIX
बीओएस
बीएसडी/ओएस (बीएसडीआई)
Cygwin
डीजी/यूएक्स
डॉस डीजेजीपीपी 1)
डायनिक्स/पीटीएक्स
ईपीओसी आर5
FreeBSD
HI-UXMPP (हिताची) (5.8.0 काम करता था लेकिन हमें इसका पता नहीं था)
HP-UX
IRIX
Linux
मैक ओएस क्लासिक
मैक ओएस एक्स (डार्विन)
एमपीई/आईएक्स
NetBSD
नेटवेअर
नॉनस्टॉप-यूएक्स
ReliantUNIX (पूर्व में SINIX)
OpenBSD
ओपनवीएमएस (पूर्व में वीएमएस)
UNIX खोलें (यूनिक्सवेयर) (पर्ल 5.8.1/5.9.0 के बाद से)
ओएस / 2
ओएस/400 (पीएएसई का उपयोग करके) (पर्ल 5.8.1/5.9.0 के बाद से)
पावरयूएक्स
POSIX-BC (पूर्व में BS2000)
QNX
सोलारिस
सनओएस 4
सुपर-यूएक्स (एनईसी)
Tru64 UNIX (पूर्व में DEC OSF/1, डिजिटल UNIX)
यूनिकोस
यूनिकोस/एमके
यूटीएस
वीओएस/ओपनवीओएस
Win95/98/ME/2K/XP 2)
झिझक
z/OS (पूर्व में OS/390)
वीएम/ईएसए
1) डॉस मोड में या तो डॉस या ओएस/2 पोर्ट का उपयोग किया जा सकता है
2) कंपाइलर: बोर्लैंड, मिनजीडब्ल्यू (जीसीसी), वीसी6
निम्नलिखित प्लेटफ़ॉर्म ने पिछली रिलीज़ (5.6 और 5.7) के साथ काम किया, लेकिन हमने नहीं किया
5.8.0 रिलीज के लिए समय पर इन्हें ठीक करने या परीक्षण करने का प्रबंधन करें। वहाँ एक बहुत अच्छा है
संभावना है कि इनमें से कई 5.8.0 के साथ ठीक से काम करेंगे।
बीएसडी/ओएस
डोमेनओएस
हर्ड
लिंक्स
मैकटेन
पॉवरमैक्स
एससीओ एसवी
एसवीआर4
यूनिक्सवेयर
Windows 3.1
5.8.0 के लिए टूटा हुआ माना जाता है (लेकिन 5.6.1 और 5.7.2 का उपयोग किया जा सकता है):
अमीगाओएस
निम्नलिखित प्लेटफ़ॉर्म को अतीत में स्रोत से पर्ल बनाने के लिए जाना जाता है (5.005_03
और पहले), लेकिन हम वर्तमान रिलीज़ के लिए उनकी स्थिति सत्यापित नहीं कर पाए हैं,
या तो इसलिए कि हार्डवेयर/सॉफ़्टवेयर प्लेटफ़ॉर्म दुर्लभ हैं या इसलिए कि हमारे पास कोई सक्रिय प्लेटफ़ॉर्म नहीं है
इन प्लेटफार्मों पर चैंपियन - या दोनों। हालाँकि, वे काम करते थे, इसलिए आगे बढ़ें और प्रयास करें
उन्हें संकलित करना, और चलो [ईमेल संरक्षित] किसी भी परेशानी का.
3b1
ए/यूएक्स
उत्तलओएस
सीएक्स/यूएक्स
डीसी/ओएसx
डीडीई एसएमईएस
डॉस ईएमएक्स
डायनिक्स
ईपी/IX
ईसिक्स
एफपीएस
Genix
हरी पहाड़ियां
आइएससी
मैकटेन 68k
MPC
समाचार-ओएस
अगला कदम
ओपनस्टेप
ओपुस
9 योजना
आरआईएससी/ओएस
एससीओ ओडीटी/ओएसआर
तारकीय
एसवीआर2
TI1500
टाइटनओएस
अल्ट्रिक्स
यूनिसिस डायनिक्स
निम्नलिखित प्लेटफ़ॉर्म के पास अपने स्वयं के स्रोत कोड वितरण और बायनेरिज़ उपलब्ध हैं
के माध्यम से <http://www.cpan.org/ports/>
पर्ल रिलीज
ओएस/400 (आईएलई) 5.005_02
टेंडेम गार्जियन 5.004
निम्नलिखित प्लेटफ़ॉर्म पर केवल बायनेरिज़ उपलब्ध हैं
<http://www.cpan.org/ports/index.html> :
पर्ल रिलीज
बलूत का फल RISCOS 5.005_02
एओएस 5.002
लिंक्सओएस 5.004_02
हालाँकि हमारा सुझाव है कि आप हमेशा दोनों के लिए सोर्स कोड से अपना खुद का पर्ल बनाएं
अधिकतम विन्यास और सुरक्षा के लिए, यदि आप जल्दी में हैं तो आप जाँच कर सकते हैं
<http://www.cpan.org/ports/index.html> बाइनरी वितरण के लिए।
onworks.net सेवाओं का उपयोग करके ऑनलाइन पर्लपोर्ट का उपयोग करें