انجليزيالفرنسيةالإسبانية

OnWorks فافيكون

بيرليول - عبر الإنترنت في السحابة

قم بتشغيل perliol في موفر الاستضافة المجاني OnWorks عبر Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

هذا هو الأمر perliol الذي يمكن تشغيله في موفر الاستضافة المجاني OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت

برنامج:

اسم


perliol - C API لتطبيق Perl لـ IO في الطبقات.

موجز


/* تحديد الطبقة ... */
#يشمل

الوصف


تصف هذه الوثيقة سلوك وتنفيذ تجريد PerlIO
موصوف في perlapio عندما يتم تعريف "USE_PERLIO".

تاريخنا و خلفيّة
تم تقديم فكرة PerlIO في perl5.003_02 ولكنها ضعفت باعتبارها مجرد فكرة
التجريد حتى بيرل 5.7.0. ولكن خلال ذلك الوقت تم تبديل عدد من امتدادات بيرل
لاستخدامه، لذلك يتم إصلاح واجهة برمجة التطبيقات (API) في الغالب للحفاظ على التوافق (المصدر).

الهدف من التنفيذ هو توفير PerlIO API في نظام مرن ومنصة
بطريقة محايدة. إنها أيضًا تجربة لنهج "Object Oriented C، مع vtables" الذي
يمكن تطبيقه على بيرل 6.

الباقة الأساسية الهيكلية
PerlIO عبارة عن كومة من الطبقات.

تعمل المستويات المنخفضة للمكدس مع استدعاءات نظام التشغيل ذات المستوى المنخفض (ملف
الواصفات في C) الحصول على البايتات داخل وخارج الطبقات العليا من المخزن المؤقت للمكدس، والتصفية،
ومعالجة الإدخال/الإخراج وإرجاع الأحرف (أو البايتات) إلى Perl. شروط فوق
و أقل من تُستخدم للإشارة إلى الموضع النسبي لطبقات المكدس.

تحتوي الطبقة على "vtable"، جدول عمليات الإدخال/الإخراج (على مستوى C جدول الوظائف
المؤشرات)، وأعلام الحالة. تقوم الوظائف الموجودة في vtable بتنفيذ عمليات مثل
"فتح" و"قراءة" و"كتابة".

عندما يتم طلب الإدخال/الإخراج، على سبيل المثال "قراءة"، ينتقل الطلب من Perl أولاً إلى أسفل الملف
كومة باستخدام وظائف "القراءة" لكل طبقة، ثم في الأسفل يتم طلب الإدخال منها
خدمات نظام التشغيل، ثم يتم إرجاع النتيجة إلى أعلى المكدس، وأخيرًا
يتم تفسيرها على أنها بيانات بيرل.

لا تنتقل الطلبات بالضرورة دائمًا إلى نظام التشغيل: هذا هو
حيث يأتي دور التخزين المؤقت لـ PerlIO.

عندما تفعل افتح() وحدد طبقات PerlIO الإضافية التي سيتم نشرها، وهي الطبقات التي تريد نشرها
يتم "دفع" التحديد أعلى المكدس الافتراضي الموجود بالفعل. إحدى الطرق لرؤيتها هي
أن "نظام التشغيل موجود على اليسار" و"Perl موجود على اليمين".

تعتمد الطبقات الدقيقة الموجودة في هذه المجموعة الافتراضية على الكثير من الأشياء: طريقة التشغيل لديك
النظام، إصدار Perl، تكوين وقت ترجمة Perl، وتكوين وقت تشغيل Perl.
راجع PerlIO، "PERLIO" في perlrun، وافتحه لمزيد من المعلومات.

binmode () تعمل بشكل مشابه ل افتح(): بشكل افتراضي يتم دفع الطبقات المحددة إلى الأعلى
من المكدس الموجود.

ومع ذلك، لاحظ أنه حتى عندما يتم "دفع" الطبقات المحددة إلى الأعلى افتح() و
binmode ()، هذا لا يعني أن التأثيرات تقتصر على "الجزء العلوي": يمكن لطبقات PerlIO ذلك
كن "نشطًا" جدًا وقم بفحص الطبقات والتأثير عليها بشكل أعمق في المكدس. كمثال
هناك طبقة تسمى "خام" والتي "تنبثق" الطبقات بشكل متكرر حتى تصل إلى الطبقة الأولى
الطبقة التي أعلنت أنها قادرة على التعامل مع البيانات الثنائية. الطبقات "المدفوعة" هي
تتم معالجتها بالترتيب من اليسار إلى اليمين.

sysopen () يعمل (بشكل غير مفاجئ) عند مستوى أقل في المكدس من افتح(). إلى
مثال في أنظمة Unix أو Unix-like sysopen () يعمل مباشرة على مستوى الملف
الواصفات: من حيث طبقات PerlIO، فهي تستخدم فقط طبقة "يونيكس"، وهي طبقة
غلاف رفيع إلى حد ما أعلى واصفات ملفات Unix.

طبقات vs التخصصات
استخدمت المناقشة الأولية حول القدرة على تعديل سلوك تدفقات الإدخال/الإخراج هذا المصطلح
"الانضباط" للكيانات التي تمت إضافتها. جاء هذا (على ما أعتقد) من استخدام
المصطلح في "sfio"، والذي استعاره بدوره من "تخصصات الخط" في محطات Unix.
ومع ذلك، يستخدم هذا المستند (والرمز C) المصطلح "طبقة".

وآمل أن يكون هذا مصطلحًا طبيعيًا نظرًا للتنفيذ، ويجب تجنب الدلالات
المتأصلة في الاستخدامات السابقة لـ "الانضباط" لأشياء مختلفة إلى حد ما.

البيانات هياكل
بنية البيانات الأساسية هي PerlIOl:

typedef struct _PerlIO PerlIOl;
typedef struct _PerlIO_funcs PerlIO_funcs;
typedef PerlIOl *PerlIO;

struct _PerliIO
{
بيرل * التالي؛ /* الطبقة السفلى */
PerlIO_funcs * علامة التبويب؛ /* وظائف هذه الطبقة */
أعلام U32؛ /* أعلام مختلفة للدولة */
};

"PerlIOl *" هو مؤشر للبنية، و استمارتنا المستوى "PerliIO *" هو أ
مؤشر إلى "PerlIOl *" - أي مؤشر إلى مؤشر إلى البنية. وهذا يسمح
مستوى التطبيق "PerlIO *" ليظل ثابتًا بينما يكون "PerlIOl *" الفعلي تحته
التغييرات. (قارن "SV *" الخاص بـ Perl والذي يظل ثابتًا بينما يتغير حقل "sv_any" الخاص به إلى
يتغير نوع العدد القياسي.) يتم بعد ذلك تمثيل دفق الإدخال / الإخراج بشكل عام كمؤشر
هذه القائمة المرتبطة بـ "الطبقات".

وتجدر الإشارة إلى أنه بسبب المراوغة المزدوجة في "PerlIO *"، أ
"&(perlio->next)" "هو" "PerliIO *"، وبالتالي إلى حد ما، يمكن لطبقة واحدة على الأقل استخدام
واجهة برمجة التطبيقات "القياسية" في الطبقة التالية لأسفل.

تتكون "الطبقة" من جزأين:

1. وظائف وسمات "فئة الطبقة".

2. البيانات لكل مثيل لمقبض معين.

وظائف و السمات
يتم الوصول إلى الوظائف والسمات عبر عضو "علامة التبويب" (للجدول) في "PerlIOl".
يتم إصلاح الوظائف (أساليب الطبقة "الفئة")، ويتم تحديدها بواسطة
نوع "PerlIO_funcs". إنها بشكل عام نفس وظائف "PerlIO_" العامة:

struct _PerlIO_funcs
{
Size_t fsize;
شار * الاسم؛
الحجم_t الحجم؛
النوع الرابع
IV (*Pushed)(pTHX_ PerlIO *f,const char *mode,SV *arg, PerlIO_funcs *tab);
IV (*برزت)(pTHX_ PerlIO *f);
PerlIO * (* مفتوح)(pTHX_ PerlIO_funcs *علامة التبويب،
PerlIO_list_t * الطبقات، IV n،
وضع const char *،
إنت فد، إنت إيمود، إنت بيرم،
بيرليو * قديم،
int narg، SV ** args)؛
IV (*Binmode)(pTHX_ PerlIO *f);
SV * (*Getarg)(pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags)
IV (*Fileno)(pTHX_ PerlIO *f);
PerlIO * (*Dup)(pTHX_ PerlIO *f، PerlIO *o، CLONE_PARAMS *param، int flags)
/* الدوال المشابهة لنظام Unix - تخصصات خط cf sfio */
SSize_t (*قراءة)(pTHX_ PerlIO *f, void *vbuf, Size_t count);
SSize_t (*غير مقروء)(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
SSize_t (*Write)(pTHX_ PerlIO *f, const void *vbuf, Size_t count);
IV (*Seek)(pTHX_ PerlIO *f، Off_t Off، int من أين)؛
Off_t (*Tell)(pTHX_ PerlIO *f);
IV (*إغلاق)(pTHX_ PerlIO *f);
/* وظائف الإدخال والإخراج المخزنة مؤقتًا التي تشبه Stdio */
IV (* فلوش) (pTHX_ PerlIO *f)؛
IV (*ملء)(pTHX_ PerlIO *f);
IV (*Eof)(pTHX_ PerlIO *f);
IV (*خطأ)(pTHX_ PerlIO *f);
باطلة (*Clearerr)(pTHX_ PerlIO *f);
باطلة (*Setlinebuf)(pTHX_ PerlIO *f);
/* وظائف التطفل في بيرل */
STDCHAR * (*Get_base)(pTHX_ PerlIO *f);
Size_t (*Get_bufsiz)(pTHX_ PerlIO *f);
STDCHAR * (*Get_ptr)(pTHX_ PerlIO *f);
SSize_t (*Get_cnt)(pTHX_ PerlIO *f);
void (*Set_ptrcnt)(pTHX_ PerlIO *f,STDCHAR *ptr,SSize_t cnt);
};

الأعضاء القليلة الأولى في البنية تعطي حجم جدول الوظائف للتحقق من التوافق
"اسم" الطبقة، وحجم "malloc" لبيانات كل مثيل، وبعض العلامات
وهي سمات للفئة ككل (مثل ما إذا كانت طبقة تخزين مؤقت)، إذن
اتبع الوظائف التي تقع في أربع مجموعات أساسية:

1. وظائف الفتح والإعداد

2. عمليات الإدخال والإخراج الأساسية

3. خيارات التخزين المؤقت لفئة Stdio.

4. وظائف لدعم الوصول التقليدي "السريع" لـ Perl إلى المخزن المؤقت.

ليس من الضروري أن تقوم الطبقة بتنفيذ جميع الوظائف، ولكن يجب أن يقوم الجدول بأكمله بذلك
حاضر. يمكن أن تكون الفتحات غير المنفذة فارغة (مما سيؤدي إلى حدوث خطأ عند استدعائها) أو
يمكن ملؤها ببذرة "لوراثة" السلوك من "الفئة الأساسية". هذا "الميراث"
يتم إصلاحه لجميع مثيلات الطبقة، ولكن عندما تختار الطبقة أي بذرة تريد ملؤها
الجدول محدود "الميراث المتعدد" ممكن.

لكل حالة البيانات
يتم الاحتفاظ ببيانات كل مثيل في الذاكرة خارج بنية PerlIOl الأساسية، عن طريق إنشاء ملف
PerlIOl العضو الأول في بنية الطبقة وبالتالي:

هيكل typedef
{
قاعدة بناء _PerlIO؛ /* معلومات "الفئة" الأساسية */
STDCHAR * buf; /* بداية المخزن المؤقت */
STDCHAR * النهاية؛ /* نهاية الجزء الصالح من المخزن المؤقت */
STDCHAR * ptr; /* الوضع الحالي في المخزن المؤقت */
Off_t posn؛ /* إزاحة buf في الملف */
Size_t bufsiz; /* الحجم الحقيقي للمخزن المؤقت */
رابعا كلمة واحدة. /* المخزن المؤقت للطوارئ */
} بيرليوبوف;

بهذه الطريقة (كما هو الحال بالنسبة لقيم بيرل) يمكن التعامل مع مؤشر PerlIOBuf كمؤشر
إلى بيرل.

طبقات in عمل.
الجدول بيرليو يونيكس
| |
+----------+ +----------+ +--------+
بيرليو ->| |--->| التالي |--->| فارغة |
+----------+ +----------+ +--------+
| | | المخزن المؤقت | | فد |
+----------+ | | +--------+
| | +---------+

ما ورد أعلاه يحاول إظهار كيفية عمل نظام الطبقة في حالة بسيطة. التطبيقات
يشير "PerlIO *" إلى إدخال في الجدول (الجداول) الذي يمثل المقابض المفتوحة (المخصصة). ل
على سبيل المثال، تتوافق الفتحات الثلاثة الأولى في الجدول مع "stdin" و"stdout" و"stderr".
يشير الجدول بدوره إلى الطبقة "العلوية" الحالية للمقبض - في هذه الحالة
مثيل لطبقة التخزين المؤقت العامة "بيرليو". وتشير تلك الطبقة بدورها إلى الطبقة التالية
الطبقة السفلية - في هذه الحالة طبقة "يونيكس" ذات المستوى المنخفض.

ما ورد أعلاه يعادل تقريبًا دفقًا مخزنًا مؤقتًا "stdio"، ولكن مع أكثر من ذلك بكثير
المرونة:

· إذا كان مستوى Unix "قراءة"/"كتابة"/"lseek" غير مناسب لمآخذ التوصيل (على سبيل المثال)، فإن
يمكن استبدال طبقة "يونيكس" (في وقت مفتوح أو حتى ديناميكيًا) بطبقة "مقبس".

· يمكن أن تحتوي المقابض المختلفة على أنظمة تخزين مؤقت مختلفة. يمكن أن تكون الطبقة "العلوية" هي الطبقة
طبقة "mmap" إذا كانت قراءة ملفات القرص أسرع باستخدام "mmap" من "read". ان
يمكن تنفيذ الدفق "غير المخزن مؤقتًا" ببساطة من خلال عدم وجود طبقة عازلة.

· يمكن إدراج طبقات إضافية لمعالجة البيانات أثناء تدفقها. كان هذا
الحاجة الدافعة لإدراج المخطط في Perl 5.7.0+ - كنا بحاجة إلى آلية للسماح بذلك
البيانات المراد ترجمتها بين الترميز الداخلي لـ Perl (من الناحية النظرية على الأقل Unicode
مثل UTF-8)، والتنسيق "الأصلي" الذي يستخدمه النظام. يتم توفير هذا من خلال
طبقة ":encoding(xxxx)" والتي تقع عادةً فوق طبقة التخزين المؤقت.

· يمكن إضافة طبقة تحتوي على "\n" لترجمة CRLF. يمكن استخدام هذه الطبقة على أي
منصة، وليس فقط تلك التي تفعل عادة مثل هذه الأشياء.

لكل حالة علم بت
إن بتات العلامات العامة عبارة عن مزيج من إشارات نمط "O_XXXX" المشتقة من سلسلة الوضع
تم تمريرها إلى "PerlIO_open()"، وبتات الحالة لطبقات المخزن المؤقت النموذجية.

بيرليو_F_EOF
نهاية الملف.

بيرليو_F_CANWRITE
يُسمح بالكتابة، أي يتم فتحها كـ "w" أو "r+" أو "a"، وما إلى ذلك.

بيرليو_F_CANREAD
يُسمح بالقراءات، أي فتح "r" أو "w+" (أو حتى "a+" - ick).

بيرليو_F_ERROR
حدث خطأ (بالنسبة إلى "PerlIO_error()").

بيرليو_F_TRUNCATE
اقتطاع الملف المقترح بواسطة الوضع المفتوح.

بيرليو_F_APPEND
يجب أن تكون جميع الكتابات إلحاقية.

بيرليو_F_CRLF
تقوم الطبقة بتنفيذ "\n" الذي يشبه Win32 والذي تم تعيينه إلى CR,LF للإخراج وتم تعيين CR,LF إلى
"\n" للإدخال. عادةً ما تكون طبقة "crlf" المقدمة هي الطبقة الوحيدة التي تحتاج إلى عناء
حول هذا. سوف يعبث "PerlIO_binmode()" بهذه العلامة بدلاً من إضافة/إزالة الطبقات
إذا تم تعيين البت "PERLIO_K_CANCRLF" لفئة الطبقات.

بيرليو_F_UTF8
يجب أن تكون البيانات المكتوبة على هذه الطبقة مشفرة بـ UTF-8؛ ينبغي للبيانات المقدمة من هذه الطبقة
يمكن اعتباره ترميز UTF-8. يمكن ضبطها على أي طبقة بواسطة الطبقة الوهمية ":utf8". تعيين أيضا
على طبقة ": الترميز".

بيرليو_F_UNBUF
الطبقة غير مخزنة مؤقتًا - أي يجب أن تتم الكتابة إلى الطبقة التالية لأسفل لكل عملية كتابة إليها
هذه الطبقة.

بيرليو_F_WRBUF
يحتفظ المخزن المؤقت لهذه الطبقة حاليًا بالبيانات المكتوبة عليها ولكن لا يتم إرسالها إلى الطبقة التالية
طبقة.

بيرليو_F_RDBUF
يحتفظ المخزن المؤقت لهذه الطبقة حاليًا بالبيانات غير المستهلكة المقروءة من الطبقة الموجودة أسفلها.

بيرليو_F_LINEBUF
يتم تخزين الطبقة بشكل مؤقت. يجب تمرير بيانات الكتابة إلى الطبقة التالية لأسفل كلما ظهر "\n"
ينظر. يجب بعد ذلك معالجة أي بيانات تتجاوز "\n".

بيرليو_F_TEMP
تم تحرير الملف "unlink()" أو يجب حذفه في "Close()".

بيرليو_F_OPEN
المقبض مفتوح.

بيرليو_F_FASTGETS
يدعم هذا المثيل لهذه الطبقة واجهة "الحصول السريع". عادة ما يتم تعيينها على أساس
على "PERLIO_K_FASTGETS" للفئة وبوجود الوظيفة (الوظائف) في
طاولة. ومع ذلك، قد تحتاج الفئة التي توفر هذه الواجهة عادةً إلى تجنبها على ملف
على وجه الخصوص. تحتاج الطبقة "المعلقة" إلى القيام بذلك عندما يتم دفعها فوق طبقة
الطبقة التي لا تدعم الواجهة. (لا تتوقع "sv_gets()" الخاصة بـ Perl
يتدفق سلوك "الحصول على" بسرعة ليتغير خلال عملية "الحصول" واحدة.)

طرق in التفاصيل
حجم
Size_t fsize;

حجم جدول الوظائف تتم مقارنة ذلك بالقيمة "التي يعرفها" كود PerlIO كـ
فحص التوافق. الإصدارات المستقبلية قد تكون قادرة على تحمل الطبقات المتراكمة ضدها
نسخة قديمة من الرؤوس.

الاسم
شار * الاسم؛

اسم الطبقة التي افتح() الطريقة التي يجب أن يستدعيها بيرل افتح(). فمثلا
إذا كانت الطبقة تسمى APR، فسوف تقوم بالاتصال:

افتح $fh، ">:APR"، ...

ويعلم بيرل أنه يتعين عليه استدعاء بيرلIOAPR_open() الطريقة التي تنفذها
طبقة أبريل.

المقاس
الحجم_t الحجم؛

حجم بنية البيانات لكل مثيل، على سبيل المثال:

حجم (بيرلIOAPR)

إذا كان هذا الحقل صفرًا، فإن "PerlIO_pushed" لا يقوم بتحديد أي شيء ويفترض
ستقوم وظيفة الدفع الخاصة بالطبقة بإجراء أي معالجة مطلوبة لمكدس الطبقة - تُستخدم لتجنب ذلك
malloc/النفقات العامة المجانية للطبقات الوهمية. إذا كان الحقل غير الصفر فيجب أن يكون على الأقل
حجم "PerlIOl"، "PerlIO_pushed" سيخصص الذاكرة لبيانات الطبقة
الهياكل وربط طبقة جديدة على مكدس الدفق. (إذا كانت الطريقة المدفوعة للطبقة
تُرجع إشارة خطأ إلى ظهور الطبقة مرة أخرى.)

نوع
النوع الرابع

· بيرليو_K_BUFFERED

يتم تخزين الطبقة مؤقتًا.

· بيرليو_K_RAW

من المقبول وجود الطبقة في مكدس binmode(FH) - أي أنها لا (أو سوف
تكوين نفسه على عدم) تحويل البايتات التي تمر عبره.

· بيرليو_K_CANCRLF

يمكن أن تترجم الطبقة بين "\n" ونهايات سطر CRLF.

· PERLIO_K_FASTGETS

تسمح الطبقة بالتطفل على المخزن المؤقت.

· بيرليو_K_MULTIRG

تستخدم عند الطبقة افتح() يقبل حججًا أكثر من المعتاد. اضافية
يجب ألا تأتي الوسائط قبل الوسيطة "MODE". عندما يتم استخدام هذا العلم فإنه
يصل إلى الطبقة للتحقق من صحة الحجج.

دفع
IV (*Pushed)(pTHX_ PerlIO *f,const char *mode, SV *arg);

الطريقة الوحيدة الإلزامية على الإطلاق. يتم استدعاؤه عندما يتم دفع الطبقة إلى المكدس.
قد تكون وسيطة "الوضع" فارغة إذا حدث ذلك بعد الفتح. "arg" لن تكون "NULL"
إذا تم تمرير سلسلة وسيطة. في معظم الحالات، يجب أن يستدعي هذا "PerlIOBase_pushed()"
لتحويل "الوضع" إلى إشارات "PERLIO_F_XXXXXX" المناسبة بالإضافة إلى أي علامات
الإجراءات التي تتخذها الطبقة نفسها. إذا كانت الطبقة لا تتوقع وسيطة فهي بحاجة إليها
لا تقم بحفظ ما تم تمريره إليه، ولا توفر "Getarg()" (ربما يمكن ذلك
"Perl_warn" أن الوسيطة كانت غير متوقعة).

يعود 0 على النجاح. عند إرجاع الفشل -1 ويجب تعيين errno.

برزت
IV (*برزت)(pTHX_ PerlIO *f);

يتم استدعاؤه عند ظهور الطبقة من المكدس. سيتم عادةً ظهور الطبقة بعد ذلك
يتم استدعاء "إغلاق ()". لكن يمكن فرقعة الطبقة دون إغلاقها إذا كان البرنامج كذلك
إدارة الطبقات ديناميكيًا في الدفق. في مثل هذه الحالات، يجب أن يقوم "Popped()" بتحرير أي منها
الموارد (المخازن المؤقتة، جداول الترجمة، ...) لا يتم الاحتفاظ بها مباشرة في بنية الطبقة.
ويجب أيضًا أن تكون "غير مقروءة ()" أي بيانات غير مستهلكة تمت قراءتها وتخزينها مؤقتًا
الطبقة السفلية تعود إلى تلك الطبقة، بحيث يمكن إعادة تقديمها إلى ما كانت عليه الآن
في الاعلى.

يعود 0 على النجاح والفشل. إذا عادت "Popped()". صحيح then بيرليو.c يفترض
إما أن الطبقة قد برزت بنفسها، أو أن الطبقة مميزة للغاية ويجب أن تكون كذلك
الاحتفاظ بها لأسباب أخرى. في معظم الحالات يجب أن يعود زائف.

ساعات العمل
بيرليو * (*مفتوح)(...);

تحتوي طريقة "Open()" على الكثير من الوسائط لأنها تجمع بين وظائف لغة Perl
"open" و"PerlIO_open" و"sysopen" الخاص بـ Perl و"PerlIO_fdopen" و"PerlIO_reopen". ال
النموذج الأولي الكامل هو كما يلي:

PerlIO * (* مفتوح)(pTHX_ PerlIO_funcs *علامة التبويب،
PerlIO_list_t * الطبقات، IV n،
وضع const char *،
إنت فد، إنت إيمود، إنت بيرم،
بيرليو * قديم،
int narg، SV ** args)؛

يجب أن يستدعي Open (ربما بشكل غير مباشر) "PerlIO_allocate()" لتخصيص فتحة في
الجدول وربطه بمعلومات الطبقات للملف المفتوح عن طريق الاتصال
"بيرليو_بوش". ال طبقات عبارة عن مصفوفة من جميع الطبقات المخصصة لـ "PerlIO *"،
وأي حجج تم تمريرها إليهم، n هو الفهرس الموجود في تلك المجموعة من الطبقة
مُسَمًّى. سيُرجع الماكرو "PerlIOArg" ملف SV * (ربما "NULL") للوسيطة
مرت إلى الطبقة.

تشتهر أجهزة تركيز الأكسجين البيطرية من كالسـتين بجودتها العالية وفعاليتها في الميدان. طريقة السلسلة عبارة عن سلسلة ""fopen()"-like" والتي تتطابق مع التعبير العادي
"/^[I#]?[rwa]\+?[bt]?$/".

يتم استخدام البادئة "I" أثناء إنشاء "stdin".."stderr" عبر خاص
مكالمات "PerlIO_fdopen"؛ البادئة "#" تعني أن هذا هو "sysopen" وذاك com.imode و
موج الشعر بإستمرار يجب أن يتم تمريره إلى "PerllLIO_open3"؛ "ص" يعني rإياد، "ث" يعني wطقوس و "أ"
يعني append. تعني اللاحقة "+" أن كلا من القراءة والكتابة/الإلحاق موجودان
مباح. اللاحقة "b" تعني أن الملف يجب أن يكون ثنائيًا، واللاحقة "t" تعني أنه نص.
(يجب على جميع الطبقات تقريبًا إجراء عمليات الإدخال والإخراج في الوضع الثنائي، وتجاهل بتات b/t
يجب دفع طبقة ":crlf" للتعامل مع التمييز.)

If قديم ليست "NULL" فهذا هو "PerlIO_reopen". بيرل نفسها لا تستخدم هذا
(حتى الآن؟) والدلالات غامضة بعض الشيء.

If fd ليس سلبيا فهو واصف الملف الرقمي fd، والتي سيتم فتحها في
بطريقة متوافقة مع سلسلة الوضع المتوفرة، فإن المكالمة تعادل بالتالي
"بيرليو_فدوبين". في هذه الحالة نرجس سيكون صفرا.

If نرجس أكبر من الصفر فإنه يعطي عدد الوسائط التي تم تمريرها إلى "فتح"،
وإلا فسيكون 1 إذا تم استدعاء "PerlIO_open" على سبيل المثال. في الحالات البسيطة
SvPV_nolen(*args) هو اسم المسار المطلوب فتحه.

إذا كانت الطبقة توفر "Open()" فيجب عادةً استدعاء طريقة "Open()" للطبقة التالية
للأسفل (إن وجد) ثم يدفع نفسه للأعلى إذا نجح ذلك. "PerlIOBase_open" هو
شريطة أن تفعل ذلك بالضبط، لذلك في معظم الحالات لا يتعين عليك كتابة ما تريده
طريقة "فتح ()." إذا لم يتم تعريف هذه الطريقة، فقد تواجه الطبقات الأخرى صعوبة
يدفعون أنفسهم فوقه أثناء الفتح.

إذا تم تنفيذ "PerlIO_push" وفشل الفتح، فيجب أن يكون "PerlIO_pop" نفسه، نظرًا لأنه
إذا لم يكن الأمر كذلك، فلن تتم إزالة الطبقة وقد تسبب مشاكل سيئة.

إرجاع "NULL" عند الفشل.

بينمود
IV (*Binmode)(pTHX_ PerlIO *f);

خياري. يُستخدم عند دفع طبقة ":raw" (بشكل صريح أو كنتيجة لـ binmode(FH)).
إذا لم تكن الطبقة الحالية سوف برزت. إذا كان موجودًا، فيجب تكوين الطبقة كطبقة ثنائية (أو
البوب ​​نفسه) وإرجاع 0. إذا أعاد -1 للخطأ، فسوف يفشل "binmode" مع الطبقة
لا يزال على المكدس.

جيتارج
SV * (*Getarg)(pTHX_ PerlIO *f,
CLONE_PARAMS *param, int flags);

خياري. إذا كان موجودًا، فيجب إرجاع SV * الذي يمثل وسيطة السلسلة التي تم تمريرها إليها
الطبقة عندما تم دفعها. على سبيل المثال، ":encoding(ascii)" سيُرجع SvPV بقيمة
"أسكي". (المعلمة و الأعلام يمكن تجاهل الحجج في معظم الحالات)

يستخدم "Dup" "Getarg" لاسترداد الوسيطة التي تم تمريرها في الأصل إلى "Pushed"، لذلك أنت
يجب تنفيذ هذه الوظيفة إذا كانت طبقتك تحتوي على وسيطة إضافية لـ "تم الدفع" وسوف
من أي وقت مضى يكون "Dup".

رقم الملف
IV (*Fileno)(pTHX_ PerlIO *f);

إرجاع واصف ملف Unix/Posix الرقمي للمقبض. عادة
"PerlIOBase_fileno ()" (الذي يطلب فقط الطبقة التالية لأسفل) سيكون كافيًا لهذا الغرض.

يُرجع -1 عند حدوث خطأ، والذي يعتبر متضمنًا الحالة التي لا يمكن للطبقة فيها ذلك
توفير مثل هذا واصف الملف.

الحزب الاتحادي الديمقراطي
PerlIO * (*Dup)(pTHX_ PerlIO *f، PerlIO *o،
CLONE_PARAMS *param, int flags);

XXX: يحتاج إلى المزيد من المستندات.

يتم استخدامه كجزء من عملية "الاستنساخ" عندما يتم إنتاج سلسلة رسائل (وفي هذه الحالة سوف تقوم المعلمة
تكون غير فارغة) وعندما يتم تكرار الدفق عبر "&" في "فتح".

على غرار "Open"، يتم إرجاع PerlIO* عند النجاح، و"NULL" عند الفشل.

عرض
SSize_t (*قراءة)(pTHX_ PerlIO *f, void *vbuf, Size_t count);

عملية القراءة الأساسية.

عادةً ما سيتم استدعاء "Fill" ومعالجة المؤشرات (ربما عبر واجهة برمجة التطبيقات).
قد يكون "PerlIOBuf_read()" مناسبًا للفئات المشتقة التي توفر "الحصول السريع"
الأساليب.

إرجاع وحدات البايت الفعلية المقروءة، أو -1 عند حدوث خطأ.

غير مقروءة
SSize_t (*غير مقروءة)(pTHX_ PerlIO *f,
const void *vbuf, Size_t count);

مجموعة شاملة من "ungetc()" الخاصة بـ stdio. يجب الترتيب للقراءات المستقبلية لرؤية البايتات الموجودة
"فبوف". إذا لم يكن هناك تنفيذ أفضل بشكل واضح، فعندئذٍ "PerlIOBase_unread()"
يوفر الوظيفة عن طريق دفع طبقة "زائفة" "معلقة" فوق الطبقة المستدعية.

إرجاع عدد الأحرف غير المقروءة.

كتابة
SSize_t (*Write)(PerlIO *f, const void *vbuf, Size_t count);

عملية الكتابة الأساسية.

إرجاع البايتات المكتوبة أو -1 على خطأ.

طلب
IV (*Seek)(pTHX_ PerlIO *f، Off_t Off، int من أين)؛

ضع مؤشر الملف. يجب عادةً استدعاء طريقة "Flush" الخاصة بها ثم
طريقة "البحث" للطبقة التالية لأسفل.

إرجاع 0 عند النجاح، -1 عند الفشل.

اقول
Off_t (*Tell)(pTHX_ PerlIO *f);

قم بإرجاع مؤشر الملف. قد يعتمد على مفهوم الطبقات المخزنة مؤقتًا للموضع الذي يجب تجنبه
تكاليف غير مباشرة.

إرجاع -1 عند الفشل في الحصول على مؤشر الملف.

اغلاق
IV (*إغلاق)(pTHX_ PerlIO *f);

أغلق الدفق. يجب عادةً استدعاء "PerlIOBase_clus()" لمسح نفسه وإغلاقه
الطبقات الموجودة أدناه، ثم قم بإلغاء تخصيص أي هياكل بيانات (المخازن المؤقتة، وجداول الترجمة،
...) لا يتم الاحتفاظ بها مباشرة في بنية البيانات.

إرجاع 0 عند النجاح، -1 عند الفشل.

تدفق
IV (* فلوش) (pTHX_ PerlIO *f)؛

يجب أن تجعل حالة الدفق متسقة مع الطبقات الموجودة أدناه. وهذا هو، أي الكتابة المخزنة
يجب كتابة البيانات، وضبط موضع ملف الطبقات السفلية للبيانات المقروءة منها
أدناه ولكن لا يتم استهلاكها فعليًا. (ربما ينبغي "غير مقروءة ()" مثل هذه البيانات إلى الأسفل
طبقة.)

إرجاع 0 عند النجاح، -1 عند الفشل.

شغل
IV (*ملء)(pTHX_ PerlIO *f);

يجب ملء المخزن المؤقت لهذه الطبقة (للقراءة) من الطبقة أدناه. عندما انت
طبقة PerlIOBuf "الفئة الفرعية"، التي تريد استخدامها _اقرأ طريقة وتوريد بنفسك
طريقة التعبئة، التي تملأ المخزن المؤقت لـ PerlIOBuf.

إرجاع 0 عند النجاح، -1 عند الفشل.

يوف
IV (*Eof)(pTHX_ PerlIO *f);

إرجاع مؤشر نهاية الملف. عادةً ما يكون "PerlIOBase_eof()" كافيًا.

يُرجع 0 في نهاية الملف، و1 إذا لم يكن نهاية الملف، و-1 في حالة الخطأ.

خطأ
IV (*خطأ)(pTHX_ PerlIO *f);

عودة مؤشر الخطأ. عادةً ما يكون "PerlIOBase_error()" كافيًا.

يُرجع 1 إذا كان هناك خطأ (عادةً عند تعيين "PERLIO_F_ERROR")، ويعيد 0 بخلاف ذلك.

كليرير
باطلة (*Clearerr)(pTHX_ PerlIO *f);

مسح نهاية الملف ومؤشرات الخطأ. يجب استدعاء "PerlIOBase_clearrr()" لتعيين
علامات "PERLIO_F_XXXXXX"، والتي قد تكون كافية.

Setlinebuf
باطلة (*Setlinebuf)(pTHX_ PerlIO *f);

قم بتمييز الدفق كخط مخزّن مؤقتًا. يقوم "PerlIOBase_setlinebuf()" بتعيين PERLIO_F_LINEBUF
العلم وعادة ما يكون كافيا.

Get_base
STDCHAR * (*Get_base)(pTHX_ PerlIO *f);

خصص (إذا لم تكن قد قمت بذلك بالفعل) المخزن المؤقت للقراءة لهذه الطبقة وأعد المؤشر إليه
هو - هي. إرجاع NULL عند الفشل.

Get_bufsiz
Size_t (*Get_bufsiz)(pTHX_ PerlIO *f);

قم بإرجاع عدد البايتات التي تم وضعها آخر مرة بواسطة "Fill()" في المخزن المؤقت.

Get_ptr
STDCHAR * (*Get_ptr)(pTHX_ PerlIO *f);

قم بإرجاع مؤشر القراءة الحالي بالنسبة إلى المخزن المؤقت لهذه الطبقة.

Get_cnt
SSize_t (*Get_cnt)(pTHX_ PerlIO *f);

قم بإرجاع عدد البايتات المتبقية للقراءة في المخزن المؤقت الحالي.

Set_ptrcnt
باطلة (*Set_ptrcnt)(pTHX_ PerlIO *f,
STDCHAR *ptr, SSize_t cnt);

اضبط مؤشر القراءة وعدد البايتات لمطابقة "ptr" و/أو "cnt". ال
يجب أن يضمن التطبيق (أو الطبقة أعلاه) أنها متسقة. (الفحص مسموح به
بجنون العظمة.)

المرافق
لطلب الطبقة التالية للأسفل، استخدم PerlIONext(PerlIO *f).

للتحقق من صلاحية PerlIO*، استخدم PerlIOValid(PerlIO *f). (كل هذا يفعله حقًا
فقط للتأكد من أن المؤشر غير فارغ وأن المؤشر الموجود خلفه غير فارغ.)

يقوم PerlIOBase(PerlIO *f) بإرجاع المؤشر "Base"، أو بمعنى آخر، "PerlIOl*"
المؤشر.

يقوم PerliIOSelf(PerlIO* f, type) بإرجاع قالب PerlIOBase إلى النوع.

Perl_PerlIO_or_Base(PerlIO* f, callback, base, Failation, args) إما باستدعاء رد
من وظائف الطبقة f (فقط باسم وظيفة الإدخال/الإخراج، مثل "القراءة") مع
ال وسائط، أو إذا لم يكن هناك رد اتصال من هذا القبيل، فسيتم استدعاء قاعدة نسخة من رد الاتصال مع
نفس الوسائط، أو إذا كان f غير صالح، فاضبط errno على EBADF ثم ارجع فشل.

Perl_PerlIO_or_fail(PerlIO* f, callback, Failation, args) إما يستدعي رد ل
وظائف الطبقة f مع الالجائزة وسائط، أو إذا لم يكن هناك رد اتصال من هذا القبيل، فاضبط errno على
إينفال. أو إذا كان f غير صالح، فاضبط errno على EBADF ثم ارجع فشل.

Perl_PerlIO_or_Base_void(PerlIO* f, callback, base, args) إما يستدعي رد ل
وظائف الطبقة f مع الالجائزة وسائط، أو إذا لم يكن هناك رد اتصال من هذا القبيل، فسيتم استدعاء قاعدة
إصدار رد الاتصال بنفس الوسيطات، أو إذا كان f غير صالح، فاضبط errno على EBADF.

Perl_PerlIO_or_fail_void(PerlIO* f, callback, args) إما يستدعي رد ل
وظائف الطبقة f مع الالجائزة وسائط، أو إذا لم يكن هناك رد اتصال من هذا القبيل، فاضبط errno على
إينفال. أو إذا كان f غير صالح، فاضبط errno على EBADF.

تنفيذ بيرليو طبقات
إذا وجدت وثيقة التنفيذ غير واضحة أو غير كافية، فانظر إلى القائمة
تطبيقات طبقة PerlIO، والتي تشمل:

· تطبيقات جيم

تشتهر أجهزة تركيز الأكسجين البيطرية من كالسـتين بجودتها العالية وفعاليتها في الميدان. بيرليو.c و بيرليول. ح في لغة Perl الأساسية، يتم تنفيذ "unix"، و"perlio"، و"stdio"،
طبقات "crlf" و"utf8" و"byte" و"raw" و"معلقة" وأيضًا طبقات "mmap" و"win32"
طبقات إذا أمكن. ("Win32" غير مكتمل حاليًا وغير مستخدم، لمعرفة ما هو عليه
يُستخدم بدلاً من ذلك في Win32، راجع "الاستعلام عن طبقات معالجات الملفات" في PerlIO .)

PerlIO::encoding، PerlIO::scalar، PerlIO::via في قلب Perl.

PerlIO::gzip وAPR::PerlIO (mod_perl 2.0) على CPAN.

· تطبيقات بيرل

PerlIO::via::QuotedPrint في قلب Perl وPerlIO::via::* على CPAN.

إذا كنت تقوم بإنشاء طبقة PerlIO، فقد ترغب في أن تكون كسولًا، بمعنى آخر، في التنفيذ
فقط الطرق التي تهمك. الطرق الأخرى التي يمكنك استبدالها بـ
طرق "فارغة".

PerlIOBase_noop_ok
PerlIOBase_noop_fail

(والتي لا تفعل شيئًا، وترجع صفر و-1، على التوالي) أو لطرق معينة يمكنك فعل ذلك
تفترض سلوكًا افتراضيًا باستخدام أسلوب NULL. تبحث الطريقة المفتوحة عن المساعدة في ملف
طبقة "الوالدين". ويلخص الجدول التالي السلوك:

سلوك الأسلوب مع NULL

Clearerr PerlIOBase_clearrr
أغلق PerlIOBase_cloud
دوب PerlIOBase_dup
Eof PerlIOBase_eof
خطأ في PerlIOBase_error
Fileno PerlIOBase_fileno
فشل التعبئة
نجاح دافق
نجاح جيتارج
فشل Get_base
فشل Get_bufsiz
فشل Get_cnt
فشل Get_ptr
افتح الموروثة
برزت النجاح
النجاح المدفوع
قراءة بيرليوباس_قراءة
ابحث عن الفشل
فشل Set_cnt
فشل Set_ptrcnt
Setlinebuf PerlIOBase_setlinebuf
أخبر الفشل
غير مقروء PerlIOBase_unread
فشل الكتابة

فشل قم بتعيين errno (إلى EINVAL في Unixish، إلى LIB$_INVARG في VMS) و
العودة -1 (للقيم المرجعة الرقمية) أو NULL (للمؤشرات)
موروث موروث من الطبقة أدناه
النجاح إرجاع 0 (للقيم المرجعة الرقمية) أو مؤشر

جوهر طبقات
يوفر الملف "perlio.c" الطبقات التالية:

"يونيكس"
طبقة أساسية غير مخزنة تستدعي Unix/POSIX "read()"، "write()"، "lseek()"،
"يغلق()". لا يوجد تخزين مؤقت. حتى على الأنظمة الأساسية التي تميز بين O_TEXT و
O_BINARY هذه الطبقة تكون دائمًا O_BINARY.

"بيرليو"
طبقة تخزين مؤقت عامة كاملة جدًا توفر واجهة برمجة تطبيقات PerlIO بأكملها. إنها
يُقصد أيضًا استخدامها كـ "فئة أساسية" للطبقات الأخرى. (على سبيل المثال "قراءة ()"
يتم تنفيذ الطريقة من حيث أساليب "Get_cnt()"/"Get_ptr()"/"Set_ptrcnt()").

يوفر "perlio" بدلاً من "unix" بديلاً كاملاً لـ stdio كما يظهر عبر PerlIO API.
هذا هو الإعداد الافتراضي لـ USE_PERLIO عندما لا يسمح stdio الخاص بالنظام بـ "fast
يحصل على حق الوصول، والذي لا يميز بين "O_TEXT" و"O_BINARY".

"ستوديو"
طبقة توفر واجهة برمجة تطبيقات PerlIO عبر نظام الطبقة، ولكنها تنفذها من خلاله
نظام الاتصال stdio. هذا هو (حاليًا) الإعداد الافتراضي إذا كان stdio الخاص بالنظام يوفره
وصول كافٍ للسماح بالوصول السريع لـ Perl والذي لا يمكن تمييزه
بين "O_TEXT" و"O_BINARY".

"كرلف"
طبقة مشتقة باستخدام "بيرليو" كفئة أساسية. وهو يوفر "\n" يشبه Win32 إلى CR,LF
ترجمة. يمكن تطبيقه فوق "بيرليو" أو أن يكون بمثابة الطبقة العازلة نفسها.
"crlf" بدلاً من "unix" هو الإعداد الافتراضي إذا كان النظام يميز بين "O_TEXT" و
يتم فتح "O_BINARY". (في مرحلة ما، سيتم استبدال "unix" بطبقة Win32 IO "أصلية".
على هذا النظام الأساسي، نظرًا لأن طبقة القراءة/الكتابة الخاصة بـ Win32 لها عيوب مختلفة.) طبقة "crlf"
هو نموذج معقول للطبقة التي تحول البيانات بطريقة ما.

"مماب"
إذا اكتشف التكوين وظائف "mmap()" فسيتم توفير هذه الطبقة (مع "perlio" كملف
"base") الذي يقوم بعمليات "القراءة" من خلالها mmap ()في الملف. تحسين الأداء هو
هامشية في الأنظمة الحديثة، لذلك فهي موجودة بشكل أساسي كدليل على المفهوم. فمن المرجح
ليتم تفكيكها من القلب في مرحلة ما. تعتبر طبقة "mmap" نموذجًا معقولًا
للحصول على طبقة "مشتقة" بسيطة.

"قيد الانتظار"
مشتق "داخلي" من "perlio" والذي يمكن استخدامه لتوفير غير مقروءة() وظيفة
للطبقات التي لا تحتوي على مخزن مؤقت أو لا يمكن إزعاجها. (في الأساس هذه الطبقة
ينبثق "Fill()" من المكدس وبالتالي يستأنف القراءة من الطبقة أدناه.)

"خام"
طبقة وهمية لا توجد أبدًا في مكدس الطبقة. بدلا من ذلك عندما "دفعت" في الواقع
ينبثق المكدس ويزيل نفسه، ثم يقوم باستدعاء إدخال جدول دالة Binmode على كافة الملفات
الطبقات الموجودة في المكدس - عادةً ما يؤدي هذا (عبر PerlIOBase_binmode) إلى إزالة أي طبقات
لم يتم تعيين بت "PERLIO_K_RAW". يمكن للطبقات تعديل هذا السلوك عن طريق تحديد
إدخال Binmode الخاص.

"utf8"
طبقة وهمية أخرى. عند الضغط عليه، يظهر نفسه ويضبط علامة "PERLIO_F_UTF8" على وضع التشغيل
الطبقة التي كانت (والآن مرة أخرى) الجزء العلوي من المكدس.

وبالإضافة إلى ذلك بيرليو.c يوفر أيضًا عددًا من وظائف "PerlIOBase_xxxx()" وهي
مخصص للاستخدام في فتحات جدول الفصول التي لا تحتاج إلى القيام بأي شيء خاص
لطريقة معينة.

تمديد طبقات
يمكن توفير الطبقات عن طريق وحدات الامتداد. عند مواجهة طبقة غير معروفة
سيؤدي كود PerliIO ما يعادل:

استخدم "طبقة" PerlIO؛

في طبقة هي الطبقة المجهولة. بيرلو.pm سيحاول بعد ذلك:

تتطلب PerliIO::layer;

إذا لم يتم تعريف الطبقة بعد هذه العملية، فسوف تفشل عملية "الفتح".

تم تجميع طبقات الامتداد التالية مع لغة Perl:

":التشفير"
استخدام الترميز؛

يجعل هذه الطبقة متاحة، بالرغم من ذلك بيرلو.pm "يعرف" أين يمكن العثور عليه. إنه ل
مثال على الطبقة التي تأخذ وسيطة كما يطلق عليها على النحو التالي:

open( $fh, "<:encoding(iso-8859-7)", $pathname );

":العددية"
يوفر الدعم لقراءة البيانات من وكتابة البيانات إلى العددية.

open( $fh, "+<:scalar", \$scalar );

عند فتح المقبض، تحصل القراءات على بايت من قيمة السلسلة $ العدديةو
يكتب تغيير القيمة. وفي كلتا الحالتين الموقف في $ العددية يبدأ كصفر ولكن يمكن
يمكن تغييرها عن طريق "البحث"، وتحديدها عن طريق "أخبر".

يرجى ملاحظة أن هذه الطبقة تكون ضمنية عند الاتصال افتح() على النحو التالي:

open( $fh, "+<", \$scalar );

":عبر"
تم توفيره للسماح بتنفيذ الطبقات كرمز Perl. على سبيل المثال:

استخدم PerlIO::via::StripHTML؛
open( my $fh, "<:via(StripHTML)", "index.html" );

راجع PerlIO::via للحصول على التفاصيل.

ALL


الأشياء التي يجب القيام بها لتحسين هذه الوثيقة.

· شرح كيفية عمل fh صالح بدون المرور افتح()(أي تطبيق طبقة). ل
مثال إذا لم يتم فتح الملف من خلال بيرل، لكننا نريد استعادة fh، مثل ذلك
تم فتحه بواسطة بيرل.

كيف يتناسب PerlIO_apply_layera، وأين تم نشر مستنداته للعامة؟

المثال حاليًا يمكن أن يكون شيئًا مثل هذا:

PerlIO *foo_to_PerlIO(pTHX_ char *mode, ...)
{
شار * الوضع؛ /* "ث"، "ص"، الخ */
const char *layers = ":APR"; /* اسم الطبقة */
PerlIO *f = PerlIO_allocate(aTHX);
إذا (! و) {
عودة NULL ؛
}

PerlIO_apply_layers(aTHX_ f, mode,layers);

إذا (و) {
PerlIOAPR *st = PerliIOSelf(f, PerlIOAPR);
/* املأ البنية st، كما في _open() */
st->file = file;
PerlIOBase(f)->flags |= PERLIO_F_OPEN;

العودة و؛
}
عودة NULL ؛
}

· إصلاح/إضافة الوثائق في الأماكن التي تحمل علامة XXX.

· لم يتم تحديد كيفية التعامل مع الأخطاء بواسطة الطبقة. على سبيل المثال عندما $! ينبغي تعيين
بشكل صريح، عندما يجب تفويض معالجة الأخطاء إلى الطبقة العليا.

ربما تعطي بعض التلميحات حول الاستخدام سيتيرنو() أو مؤشرات إلى حيث يمكن العثور عليها.

· أعتقد أنه من المفيد إعطاء بعض الأمثلة الملموسة لتسهيل فهمها
واجهة برمجة التطبيقات. بالطبع أوافق على أن واجهة برمجة التطبيقات (API) يجب أن تكون موجزة، ولكن نظرًا لعدم وجود ذلك
الوثيقة الثانية التي تعد بمثابة دليل، أعتقد أنها ستسهل البدء
باستخدام المستند الذي يمثل واجهة برمجة التطبيقات (API)، ولكنه يحتوي على أمثلة في الأماكن التي توجد بها الأشياء
غير واضح، لشخص ليس خبيرًا في PerlIO (حتى الآن).

استخدم البيرليول عبر الإنترنت باستخدام خدمات onworks.net


خوادم ومحطات عمل مجانية

قم بتنزيل تطبيقات Windows و Linux

  • 1
    com.AstrOrzPlayer
    com.AstrOrzPlayer
    AstrOrz Player هو مشغل وسائط مجاني
    برنامج ، جزء يعتمد على WMP و VLC. ال
    لاعب بأسلوب بسيط ، مع
    أكثر من عشرة ألوان موضوع ، ويمكن أيضا
    ب ...
    تنزيل AstrOrzPlayer
  • 2
    موفيستارتف
    موفيستارتف
    Kodi Movistar + TV es un ADDON para XBMC /
    Kodi que تسمح لك بتوفير واحد
    فك التشفير دي لوس سيرفيسيوس IPTV دي
    Movistar Integrado en uno de los
    المراكز الطبية أماه ...
    تحميل برنامج Movistartv
  • 3
    كود :: بنات
    كود :: بنات
    Code :: Blocks هو برنامج مجاني ومفتوح المصدر ،
    عبر الأنظمة الأساسية C و C ++ و Fortran IDE
    بني لتلبية الاحتياجات الأكثر إلحاحًا
    من مستخدميها. انها مصممة لتكون جدا
    يمتد ...
    تنزيل Code :: Blocks
  • 4
    وسط
    وسط
    وسط أو واجهة ماين كرافت المتقدمة
    وتتبع البيانات / الهيكل هو أداة ل
    عرض لمحة عامة عن Minecraft
    العالم ، دون إنشائه فعليًا. هو - هي
    علبة ...
    تحميل Amidst
  • 5
    MSYS2
    MSYS2
    MSYS2 عبارة عن مجموعة من الأدوات و
    توفر لك المكتبات ملف
    بيئة سهلة الاستخدام للبناء ،
    تثبيت وتشغيل Windows الأصلي
    البرمجيات. إنه يخدع ...
    تنزيل MSYS2
  • 6
    libjpeg- توربو
    libjpeg- توربو
    libjpeg-turbo هو برنامج ترميز صورة JPEG
    يستخدم تعليمات SIMD (MMX ، SSE2 ،
    NEON ، AltiVec) لتسريع خط الأساس
    تم تشغيل ضغط JPEG وإلغاء الضغط
    إلى x86 ، x8 ...
    تنزيل libjpeg-turbo
  • أكثر "

أوامر لينكس

Ad