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

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

برنامج:

اسم


perlapi - وثائق مُنشأة تلقائيًا لبرل API العام

الوصف


يحتوي هذا الملف على وثائق perl public API التي تم إنشاؤها بواسطة تضمين.pl,
تحديدًا قائمة بالوظائف ووحدات الماكرو والعلامات والمتغيرات التي يمكن استخدامها بواسطة
كتاب التمديد. في النهاية قائمة الوظائف التي لم يتم توثيقها بعد.
واجهات هؤلاء عرضة للتغيير دون إشعار. أي شيء غير مدرج هنا هو
ليس جزءًا من واجهة برمجة التطبيقات العامة ، ويجب ألا يستخدمه كتّاب الإضافات على الإطلاق. لهؤلاء
الأسباب ، الاستخدام الأعمى للوظائف المدرجة في proto.h يجب تجنبه عند الكتابة
ملحقات.

لاحظ أنه يجب الإشارة إلى جميع متغيرات Perl API العامة بالبادئة "PL_". مرة أخرى،
لا يتم استخدام تلك غير المدرجة هنا من قبل كتّاب الإضافات ، ويمكن تغييرها أو
تمت إزالته دون سابق إنذار ؛ نفس الشيء مع وحدات الماكرو. يتم توفير بعض وحدات الماكرو للتوافق مع
الأسماء القديمة غير المزخرفة ، ولكن قد يتم تعطيل هذا الدعم في إصدار مستقبلي.

تمت كتابة Perl في الأصل للتعامل مع US-ASCII فقط (وهي الأحرف التي يكون ترتيبيها
الأرقام في النطاق 0-127). وقد لا تزال الوثائق والتعليقات تستخدم المصطلح
ASCII ، بينما أحيانًا يكون النطاق الكامل من 0 إلى 255 هو المقصود.

لاحظ أنه يمكن تجميع Perl وتشغيله تحت أي من ASCII أو EBCDIC (انظر perlebcdic).
تتجاهل معظم الوثائق (وحتى التعليقات في الكود) إمكانية EBCDIC.
بالنسبة لجميع الأغراض تقريبًا ، تكون الاختلافات شفافة. على سبيل المثال ، في إطار EBCDIC ،
بدلاً من UTF-8 ، يتم استخدام UTF-EBCDIC لتشفير سلاسل Unicode ، وهكذا كلما كان هذا
تشير الوثائق إلى "utf8" (ومتغيرات ذلك الاسم ، بما في ذلك أسماء الوظائف) ،
وتعني أيضًا (بشكل أساسي بشفافية) "UTF-EBCDIC". لكن ترتيبات الشخصيات
تختلف بين ترميزات ASCII و EBCDIC و UTF ، وسلسلة مشفرة في UTF-EBCDIC
قد تشغل وحدات بايت أكثر من UTF-8.

القائمة أدناه أبجدية ، غير حساسة لحالة الأحرف.

"غيمي" القيم


GIMME إصدار متوافق مع الإصدارات السابقة من "GIMME_V" والذي يمكنه فقط إرجاع "G_SCALAR" أو
"G_ARRAY" ؛ في سياق فارغ ، تقوم بإرجاع "G_SCALAR". إهمال. استخدم "GIMME_V"
بدلا من ذلك.

U32 جيم

GIMME_V مكافئ كاتب XSUB لـ Perl's "wantarray". إرجاع "G_VOID" ، "G_SCALAR"
أو "G_ARRAY" لقائمة باطلة أو قياسية أو سياق قائمة ، على التوالي. انظر perlcall للحصول على
مثال على الاستخدام.

U32 غيمي_V

يستخدم G_ARRAY للإشارة إلى سياق القائمة. راجع "GIMME_V" و "GIMME" و perlcall.

بطاقة G_DISCARD
يشير إلى أنه يجب تجاهل الوسائط التي تم إرجاعها من رد النداء. يرى
بيرلكول.

G_EVAL يُستخدم لفرض غلاف Perl "Eval" حول رد اتصال. انظر بيرلكال.

G_NOARGS
يشير إلى أنه لا يتم إرسال أي وسيطات إلى رد الاتصال. انظر بيرلكال.

G_SCALAR
تستخدم للإشارة إلى سياق عددي. راجع "GIMME_V" و "GIMME" و perlcall.

يُستخدم G_VOID للإشارة إلى سياق فارغ. راجع "GIMME_V" و perlcall.

مجموعة تلاعب وظائف


AvFILL مثل "av_top_index ()". مهمل ، استخدم "av_top_index ()" بدلاً من ذلك.

int AvFILL (AV * av)

av_clear
يحرر جميع عناصر المصفوفة ، ويتركها فارغة. XS ما يعادل
"array = ()". انظر أيضا "av_undef".

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

باطل av_clear (AV * av)

av_create_and_push
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

ادفع SV في نهاية المصفوفة ، وقم بإنشاء المصفوفة إذا لزم الأمر. صغير
وظيفة المساعد الداخلي لإزالة المصطلح المكرر بشكل شائع.

void av_create_and_push (AV ** const avp ،
SV * const val)

av_create_and_unshift_one
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

قم بإزالة إزاحة SV إلى بداية المصفوفة ، وإنشاء المصفوفة إذا لزم الأمر.
وظيفة مساعد داخلية صغيرة لإزالة المصطلح المكرر الشائع.

SV ** av_create_and_unshift_one (AV ** const avp ،
SV * const val)

av_delete
يحذف العنصر المفهرس بواسطة "key" من المصفوفة ، ويجعل العنصر مميتًا ، و
يعيدها. إذا كانت "الإشارات" تساوي "G_DISCARD" ، يتم تحرير العنصر ويكون فارغًا
عاد. مكافئ Perl: "my $ elem = delete ($ myarray [$ idx])؛" ل
إصدار غير "G_DISCARD" وحذف سياق فارغ "($ myarray [$ idx]) ؛" ل
إصدار "G_DISCARD".

SV * av_delete (AV * av ، SSize_t key ، I32 flags)

av_exists
يعود صحيحًا إذا تمت تهيئة العنصر المفهرس بواسطة "مفتاح".

يعتمد هذا على حقيقة أنه يتم تعيين عناصر الصفيف غير المهيأة إلى NULL.

مكافئ Perl: "موجود ($ myarray [$ key])".

bool av_exists (AV * av ، SSize_t key)

av_extend
تمديد مصفوفة مسبقًا. "المفتاح" هو الفهرس الذي يجب أن تكون المصفوفة
وسعوا.

void av_extend (AV * av ، SSize_t key)

av_fetch
تُرجع قيمة SV بالفهرس المحدد في المصفوفة. "المفتاح" هو الفهرس. لو
lval صحيح ، نضمن لك الحصول على SV حقيقي (في حال لم يكن حقيقيًا
قبل) ، والتي يمكنك تعديلها بعد ذلك. تحقق من أن القيمة المعادة ليست خالية
قبل إلغاء الإشارة إلى "SV *".

لمزيد من المعلومات ، راجع "فهم سحر التجزئة والمصفوفات المربوطة" في perlguts
معلومات عن كيفية استخدام هذه الوظيفة في المصفوفات المقيدة.

المكافئ الخام للبيرل هو $ myarray [$ idx].

SV ** av_fetch (AV * av ، SSize_t key ، I32 lval)

av_fill عيّن أعلى فهرس في المصفوفة للرقم المحدد ، وهو ما يعادل Perl's
"مصفوفة # $ = $ fill؛".

سيكون عدد العناصر في المصفوفة "ملء + 1" بعد ذلك av_fill () عائدات.
إذا كانت المصفوفة أقصر سابقًا ، فسيتم تعيين العناصر الإضافية الملحقة
إلى NULL. إذا كانت المصفوفة أطول ، فسيتم تحرير العناصر الزائدة.
"av_fill (av، -1)" هو نفسه "av_clear (av)".

void av_fill (AV * av، SSize_t fill)

av_len مثل "av_top_index". لاحظ أنه على عكس ما يوحي به الاسم ، فإنه يقوم بإرجاع ملف
أعلى مؤشر في المصفوفة ، حتى تحصل على حجم المصفوفة التي تحتاج إلى استخدامها
"av_len (av) + 1". هذا على عكس "sv_len" ، الذي يعرض ما كنت تتوقعه.

SSize_t av_len (AV * av)

يقوم av_make بإنشاء AV جديد وتعبئته بقائمة من SVs. يتم نسخ SVs إلى ملف
مجموعة ، لذلك قد يتم تحريرها بعد استدعاء av_make. سيحتوي AV الجديد على ملف
عدد المراجع 1.

مكافئ Perl: "mynew_array = ($ scalar1، $ scalar2، $ scalar3 ...)؛"

AV * av_make (حجم SSize_t ، SV ** strp)

av_pop يزيل SV واحدًا من نهاية المصفوفة ، ويقلل حجمه بمقدار واحد ويعود
SV (نقل التحكم في عدد مرجعي واحد) إلى المتصل. عائدات
& PL_sv_undef إذا كانت المصفوفة فارغة.

مكافئ Perl: "pop (myarray)؛"

SV * av_pop (AV * av)

av_push يدفع SV في نهاية المصفوفة. ستنمو المصفوفة تلقائيًا إلى
تستوعب الإضافة. هذا يأخذ ملكية عدد مرجعي واحد.

ما يعادل بيرل: "pushmyarray، $ elem؛".

void av_push (AV * av ، SV * val)

av_shift
يزيل SV واحدًا من بداية المصفوفة ، ويقلل حجمه بواحد ويعود
SV (نقل التحكم في عدد مرجعي واحد) إلى المتصل. عائدات
& PL_sv_undef إذا كانت المصفوفة فارغة.

مكافئ Perl: "shift (myarray)؛"

SV * av_shift (AV * av)

av_store
يخزن SV في مصفوفة. يتم تحديد فهرس الصفيف على أنه "مفتاح". العودة
ستكون القيمة فارغة إذا فشلت العملية أو إذا لم تكن هناك حاجة إلى أن تكون القيمة
مخزنة بالفعل داخل المصفوفة (كما في حالة المصفوفات المربوطة). وإلا فإنه
يمكن إلغاء الإشارة إليه للحصول على "SV *" المخزنة هناك (= "val")).

لاحظ أن المتصل مسؤول عن زيادة عدد المرجع بشكل مناسب
من "val" قبل الاستدعاء ، وإنقاصها إذا أعادت الدالة NULL.

مكافئ Perl التقريبي: "$ myarray [$ key] = $ val؛".

لمزيد من المعلومات ، راجع "فهم سحر التجزئة والمصفوفات المربوطة" في perlguts
معلومات عن كيفية استخدام هذه الوظيفة في المصفوفات المقيدة.

SV ** av_store (AV * av ، SSize_t key ، SV * val)

av_tindex
مثل "av_top_index ()".

int av_tindex (AV * av)

av_top_index
إرجاع أعلى فهرس في المصفوفة. عدد العناصر في المصفوفة هو
"av_top_index (av) + 1". إرجاع -1 إذا كانت المصفوفة فارغة.

ما يعادل Perl لهذا هو $ # myarray.

(الشكل الأقصر قليلاً هو "av_tindex".)

SSize_t av_top_index (AV * av)

av_undef
undefined المصفوفة. XS ما يعادل "undef (array)".

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

راجع "av_clear" للحصول على ملاحظة حول احتمال كون المصفوفة غير صالحة عند الإرجاع.

باطل av_undef (AV * av)

av_unshift
قم بإلغاء إزاحة العدد المحدد لقيم "undef" في بداية المصفوفة. ال
ستنمو المصفوفة تلقائيًا لاستيعاب الإضافة. يجب عليك بعد ذلك استخدام ملفات
"av_store" لتعيين قيم لهذه العناصر الجديدة.

مكافئ Perl: "unshiftmyarray، ((undef) x $ n)؛"

باطل av_unshift (AV * av ، SSize_t num)

get_av تُرجع AV لمصفوفة حزمة Perl العمومية أو الحزمة بالاسم المحدد
(لذلك لن تعمل على المتغيرات المعجمية). يتم تمرير "الإشارات" إلى "gv_fetchpv". لو
تم تعيين "GV_ADD" ولا يوجد متغير Perl ثم يتم إنشاؤه. لو
"الإشارات" تساوي صفرًا والمتغير غير موجود ثم يتم إرجاع NULL.

مكافئ بيرل: "@ {" $ name "}".

ملاحظة: تم إهمال شكل perl_ لهذه الوظيفة.

AV * get_av (اسم حرف * ثابت ، أعلام I32)

newAV يقوم بإنشاء AV جديد. تم تعيين عدد المرجع على 1.

ما يعادل بيرل: "myarray؛".

AV * newAV ()

فرز مجموعة. هنا مثال:

sortsv (AvARRAY (av) ، av_top_index (av) +1 ، Perl_sv_cmp_locale) ؛

حاليًا يستخدم هذا الترتيب الدمج دائمًا. انظر sortsv_flags لمزيد من المرونة
نمط.

sortsv باطل (SV ** array، size_t num_elts،
SVCOMPARE_t cmp)

sortsv_flags
فرز مجموعة بخيارات متنوعة.

sortsv_flags باطلة (SV ** array، size_t num_elts،
SVCOMPARE_t cmp ، أعلام U32)

"xsubpp" المتغيرات داخلي وظائف


متغير الفأس الذي تم إعداده بواسطة "xsubpp" للإشارة إلى إزاحة قاعدة المكدس ، المستخدمة بواسطة
وحدات ماكرو "ST" و "XSprePUSH" و "XSRETURN". يجب استدعاء الماكرو "dMARK" مسبقًا
لإعداد متغير "MARK".

I32 فأس

متغير CLASS الذي يتم إعداده بواسطة "xsubpp" للإشارة إلى اسم الفئة لـ C ++ XS
البناء. هذا دائمًا "حرف *". انظر الى هذا".

شار * كلاس

dAX يقوم بإعداد متغير "ax". عادة ما يتم التعامل مع هذا تلقائيًا بواسطة "xsubpp" بواسطة
استدعاء "dXSARGS".

داكس.

يقوم dAXMARK بإعداد "علامة" متغير "الفأس" ومتغير علامة المكدس. هذا عادة
يتم التعامل معها تلقائيًا بواسطة "xsubpp" عن طريق استدعاء "dXSARGS".

داكس مارك.

dITEMS يقوم بإعداد متغير "العناصر". عادة ما يتم التعامل مع هذا تلقائيًا بواسطة "xsubpp"
عن طريق استدعاء "dXSARGS".

dITEMS.

دونديربار
إعداد أي متغير يحتاجه الماكرو "UNDERBAR". كانت تستخدم لتعريف
"padoff_du" ، لكنها حاليًا noop. ومع ذلك ، ينصح بشدة أن لا يزال
استخدامه لضمان التوافق في الماضي والمستقبل.

دونديربار.

يقوم dXSARGS بإعداد مكدس ومؤشرات علامة لـ XSUB ، واستدعاء dSP و dMARK. يقوم بإعداد ملف
متغيرات "ax" و "items" عن طريق استدعاء "dAX" و "dITEMS". عادة ما يتم التعامل مع هذا
تلقائيًا بواسطة "xsubpp".

dXSARGS ؛

dXSI32 يقوم بإعداد المتغير "ix" لـ XSUB الذي له أسماء مستعارة. عادة ما يتم التعامل مع هذا
تلقائيًا بواسطة "xsubpp".

dXSI32 ؛

العناصر المتغير الذي تم إعداده بواسطة "xsubpp" للإشارة إلى عدد العناصر الموجودة في المكدس.
راجع "قوائم المعلمات ذات الطول المتغير" في perlxs.

I32 العناصر

ix المتغير الذي تم إعداده بواسطة "xsubpp" للإشارة إلى أي من الأسماء المستعارة لـ XSUB كان
تستخدم لاستدعائها. راجع "ALIAS: Keyword" في perlxs.

I32 تاسعا

متغير RETVAL الذي تم إعداده بواسطة "xsubpp" للاحتفاظ بقيمة الإرجاع لـ XSUB. هذا هو
دائمًا النوع المناسب لـ XSUB. انظر "متغير RETVAL" في perlxs.

(أيا كان) RETVAL

ST تستخدم للوصول إلى العناصر الموجودة في مكدس XSUB.

SV * ST (int ix)

هذا المتغير الذي تم إعداده بواسطة "xsubpp" لتعيين الكائن في C ++ XSUB. هذا
هو دائمًا النوع المناسب لكائن C ++. راجع "CLASS" و "استخدام XS مع C ++"
في perlxs.

(أيا كان) هذا

تحت بار
SV * المطابق للمتغير $ _. يعمل حتى لو كان هناك معجم $ _ في
نطاق.

XS Macro للإعلان عن XSUB وقائمة معلمات C الخاصة به. يتم التعامل مع هذا عن طريق "xsubpp".
إنه نفس استخدام ماكرو XS_EXTERNAL الأكثر وضوحًا.

XS_EXTERNAL
ماكرو للإعلان عن XSUB وقائمة معلمات C الخاصة به والتي تقوم بشكل صريح بتصدير ملف
حرف.

XS_INTERNAL
ماكرو للإعلان عن XSUB وقائمة معلمات C الخاصة به دون تصدير الرموز.
يتم التعامل مع هذا بواسطة "xsubpp" ويفضل بشكل عام على تصدير XSUB
الرموز بلا داع.

أن نتواصل معك وظائف


call_argv
تنفيذ رد نداء لروتين Perl الفرعي المحدد والمسمى بنطاق الحزمة مع
"argv" (مصفوفة سلاسل منتهية NULL) كوسائط. انظر بيرلكال.

مكافئ Perl التقريبي: "& {" $ sub_name "} (@ $ argv)".

ملاحظة: تم إهمال شكل perl_ لهذه الوظيفة.

I32 call_argv (const char * sub_name ، أعلام I32 ،
شار ** أرجف)

call_method
ينفذ استدعاء لطريقة Perl المحددة. يجب أن يكون الكائن المبارك على
المدخنة. انظر بيرلكال.

ملاحظة: تم إهمال شكل perl_ لهذه الوظيفة.

I32 call_method (const char * methname، I32 flags)

call_pv يقوم بتنفيذ رد نداء إلى Perl sub المحدد. انظر بيرلكال.

ملاحظة: تم إهمال شكل perl_ لهذه الوظيفة.

I32 call_pv (const char * sub_name ، أعلام I32)

call_sv يقوم بتنفيذ رد نداء للغة Perl الفرعية المحددة بواسطة SV.

إذا لم يتم توفير علامة "G_METHOD" أو "G_METHOD_NAMED" ، فقد يكون SV أيًا
من السيرة الذاتية ، أو GV ، أو إشارة إلى السيرة الذاتية ، أو إشارة إلى GV أو "SvPV (sv)"
كاسم من الباطن للاتصال.

إذا تم توفير علامة "G_METHOD" ، فقد يكون SV مرجعًا لسيرة ذاتية أو
سيتم استخدام "SvPV (sv)" كاسم لطريقة الاتصال.

إذا تم توفير علامة "G_METHOD_NAMED" ، فسيتم استخدام "SvPV (sv)" كاسم
طريقة الاتصال.

يتم التعامل مع بعض القيم الأخرى خصيصًا للاستخدام الداخلي ولا يجب معالجتها
تعتمد على.

انظر بيرلكال.

ملاحظة: تم إهمال شكل perl_ لهذه الوظيفة.

I32 call_sv (أعلام SV * sv ، VOL I32)

ENTER قوس فتح على رد نداء. انظر "مغادرة" و perlcall.

يدخل؛

تقوم Eval_pv بإخبار Perl بأن تقوم "بتقييم" السلسلة المحددة في السياق القياسي وإرجاع نتيجة SV *.

ملاحظة: تم إهمال شكل perl_ لهذه الوظيفة.

SV * EVAL_pv (const char * p، I32 croak_on_error)

Eval_sv يخبر Perl بأن "تقييم" السلسلة في SV. وهو يدعم نفس الأعلام مثل
"call_sv" ، مع استثناء واضح لـ G_EVAL. انظر بيرلكال.

ملاحظة: تم إهمال شكل perl_ لهذه الوظيفة.

I32 Eval_sv (أعلام SV * sv و I32)

فريتمبس
قوس الإغلاق للمؤقتات على رد الاتصال. راجع "SAVETMPS" و perlcall.

فريتمبس.

اترك قوس الإغلاق على رد الاتصال. انظر "أدخل" و perlcall.

يترك؛

حفظ
قوس فتح للمؤقتات على رد الاتصال. انظر "FREETMPS" و perlcall.

SAVETMPS ؛

حرف حقيبة متغير


toFOLD يحول الحرف المحدد إلى أحرف قابلة للطي. إذا كان الإدخال أي شيء سوى ملف
حرف ASCII الكبير ، يتم إرجاع حرف الإدخال نفسه. متغير
"toFOLD_A" مكافئ. (لا يوجد ما يعادل "to_FOLD_L1" بالكامل
نطاق Latin1 ، حيث يلزم التعميم الكامل لـ "toFOLD_uni" هناك.)

U8 toFOLD (U8 ch)

إلى FOLD_uni
يحول نقطة رمز Unicode "cp" إلى إصدارها المطوي ، ويخزنها في
UTF-8 في "s" وطوله بالبايت في "lenp". لاحظ أن المخزن المؤقت أشار إلى
بمقدار "s" يجب أن يكون على الأقل "UTF8_MAXBYTES_CASE + 1" بايت منذ حالة الطي
قد يكون الإصدار أطول من الحرف الأصلي.

يتم إرجاع نقطة الكود الأولى للإصدار المطوي (لكن لاحظ ، كما هو موضح
فقط أعلاه ، قد يكون هناك المزيد.)

UV toFOLD_uni (UV cp، U8 * s، STRLEN * lenp)

إلى FOLD_utf8
يحول الحرف المشفر UTF-8 في "p" إلى إصداره المطوي ، ويخزنه
ذلك في UTF-8 في "s" وطوله بالبايت في "lenp". لاحظ أن المخزن المؤقت
المشار إليها بـ "s" يجب أن تكون على الأقل "UTF8_MAXBYTES_CASE + 1" بايت منذ
قد يكون الإصدار القابل للطي أطول من الحرف الأصلي.

يتم إرجاع نقطة الكود الأولى للإصدار المطوي (لكن لاحظ ، كما هو موضح
فقط أعلاه ، قد يكون هناك المزيد.)

يُفترض أن يكون حرف الإدخال في "p" منسقًا جيدًا.

UV toFOLD_utf8 (U8 * p، U8 * s، STRLEN * lenp)

toLOWER يحول الحرف المحدد إلى أحرف صغيرة. إذا كان الإدخال أي شيء سوى ملف
حرف ASCII الكبير ، يتم إرجاع حرف الإدخال نفسه. متغير
"toLOWER_A" مكافئ.

U8 toLOWER (U8 ch)

إلى LOWER_L1
تحويل الحرف اللاتيني 1 المحدد إلى أحرف صغيرة. النتائج غير محددة
إذا كان الإدخال لا يتناسب مع بايت.

U8 إلىLOWER_L1 (U8 قناة)

إلى LOWER_LC
يحول الحرف المحدد إلى أحرف صغيرة باستخدام قواعد الإعدادات المحلية الحالية ، إذا
ممكن؛ وإلا تُرجع حرف الإدخال نفسه.

U8 toLOWER_LC (U8 قناة)

إلى LOWER_uni
يحول نقطة رمز Unicode "cp" إلى نسخته الصغيرة ، ويخزن ذلك بتنسيق
UTF-8 في "s" وطوله بالبايت في "lenp". لاحظ أن المخزن المؤقت أشار إلى
بمقدار "s" يجب أن يكون على الأقل "UTF8_MAXBYTES_CASE + 1" بايت منذ الحرف الصغير
قد يكون الإصدار أطول من الحرف الأصلي.

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

UV toLOWER_uni (UV cp، U8 * s، STRLEN * lenp)

إلى LOWER_utf8
يحول الحرف المشفر UTF-8 في "p" إلى نسخته الصغيرة ، ويخزن
ذلك في UTF-8 في "s" وطوله بالبايت في "lenp". لاحظ أن المخزن المؤقت
المشار إليها بـ "s" يجب أن تكون على الأقل "UTF8_MAXBYTES_CASE + 1" بايت منذ
قد تكون النسخة الصغيرة أطول من الحرف الأصلي.

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

يُفترض أن يكون حرف الإدخال في "p" منسقًا جيدًا.

الأشعة فوق البنفسجية toLOWER_utf8 (U8 * p ، U8 * s ، STRLEN * lenp)

toTITLE يحول الحرف المحدد إلى حرف عنوان. إذا كان الإدخال أي شيء سوى ملف
حرف ASCII الصغير ، يتم إرجاع حرف الإدخال نفسه. متغير
"toTITLE_A" مكافئ. (لا توجد "toTITLE_L1" لمجموعة Latin1 الكاملة ،
حيث أن العمومية الكاملة لـ "toTITLE_uni" مطلوبة هناك. Titlecase ليس ملف
المفهوم المستخدم في التعامل مع الإعدادات المحلية ، لذلك لا توجد وظيفة لذلك.)

U8 toTITLE (U8 ch)

إلى TITLE_uni
يحول نقطة رمز Unicode "cp" إلى إصدار حرف العنوان الخاص به ، ويخزن ذلك بتنسيق
UTF-8 في "s" وطوله بالبايت في "lenp". لاحظ أن المخزن المؤقت أشار إلى
بواسطة "s" يجب أن يكون على الأقل "UTF8_MAXBYTES_CASE + 1" بايت منذ حالة العنوان
قد يكون الإصدار أطول من الحرف الأصلي.

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

UV toTITLE_uni (UV cp، U8 * s، STRLEN * lenp)

إلى TITLE_utf8
يحول الحرف المشفر UTF-8 عند "p" إلى إصدار حرف العنوان الخاص به ، ويقوم بتخزينه
ذلك في UTF-8 في "s" وطوله بالبايت في "lenp". لاحظ أن المخزن المؤقت
المشار إليها بـ "s" يجب أن تكون على الأقل "UTF8_MAXBYTES_CASE + 1" بايت منذ
قد يكون إصدار أحرف العنوان أطول من الحرف الأصلي.

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

يُفترض أن يكون حرف الإدخال في "p" منسقًا جيدًا.

UV toTITLE_utf8 (U8 * p ، U8 * s ، STRLEN * lenp)

toUPPER يحول الحرف المحدد إلى أحرف كبيرة. إذا كان الإدخال أي شيء سوى ملف
حرف ASCII الصغير ، يتم إرجاع حرف الإدخال نفسه. متغير
"toUPPER_A" مكافئ.

U8 toUPPER (U8 ch)

إلى UPPER_uni
يحول نقطة رمز Unicode "cp" إلى نسخته الكبيرة ، ويخزنها بتنسيق
UTF-8 في "s" وطوله بالبايت في "lenp". لاحظ أن المخزن المؤقت أشار إلى
بمقدار "s" يجب أن يكون على الأقل "UTF8_MAXBYTES_CASE + 1" بايت منذ الأحرف الكبيرة
قد يكون الإصدار أطول من الحرف الأصلي.

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

UV toUPPER_uni (UV cp، U8 * s، STRLEN * lenp)

إلى UPPER_utf8
يحول الحرف المشفر UTF-8 في "p" إلى نسخته الكبيرة ، ويخزن
ذلك في UTF-8 في "s" وطوله بالبايت في "lenp". لاحظ أن المخزن المؤقت
المشار إليها بـ "s" يجب أن تكون على الأقل "UTF8_MAXBYTES_CASE + 1" بايت منذ
قد تكون النسخة الكبيرة أطول من الحرف الأصلي.

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

يُفترض أن يكون حرف الإدخال في "p" منسقًا جيدًا.

UV toUPPER_utf8 (U8 * p، U8 * s، STRLEN * lenp)

حرف تصنيف


يتناول هذا القسم الوظائف (وحدات الماكرو حقًا) التي تصنف الأحرف إلى أنواع ، مثل
كعلامات ترقيم مقابل أبجدي ، إلخ. معظمها يماثل التعبير العادي
فئات الشخصية. (راجع "فئات أحرف POSIX" في perlrecharclass.) هناك عدة فئات
المتغيرات لكل فئة. (لا تحتوي كل وحدات الماكرو على جميع المتغيرات ؛ كل عنصر أدناه يسرد ملف
تلك الصالحة لها.) لا تتأثر أي منها بـ "استخدام البايت" ، ولا تتأثر سوى تلك التي تحتوي على "LC" في
اسم تتأثر الإعدادات المحلية الحالية.

الوظيفة الأساسية ، على سبيل المثال ، "isALPHA ()" ، تأخذ ثماني بتات (إما "حرف" أو "U8") كمدخل
ويعيد قيمة منطقية لمعرفة ما إذا كان الحرف الذي يمثله ثماني بتات (أو
على الأنظمة الأساسية بخلاف ASCII ، يتوافق مع) حرف ASCII في الفئة المحددة بناءً على
قواعد النظام الأساسي و Unicode و Perl. إذا كان الإدخال رقمًا لا يتناسب مع ثماني بتات ،
تم إرجاع FALSE.

المتغير "isFOO_A" (على سبيل المثال ، "isALPHA_A ()") مطابق للدالة الأساسية بدون لاحقة
"_أ".

المتغير "isFOO_L1" يفرض الحرف اللاتيني 1 (أو مكافئ EBCDIC) على
منصة. أي أن نقاط الكود التي هي ASCII لن تتأثر ، لأن ASCII هي مجموعة فرعية
اللاتينية -1. ولكن يتم التعامل مع نقاط الرمز بخلاف ASCII كما لو كانت أحرفًا لاتينية -1.
على سبيل المثال ، سيعود "isWORDCHAR_L1 ()" صحيحًا عند استدعائه بنقطة الرمز 0xDF ،
وهو حرف كلمة في كل من ASCII و EBCDIC (على الرغم من أنه يمثل مختلفًا
شخصيات في كل).

المتغير "isFOO_uni" يشبه المتغير "isFOO_L1" ، ولكنه يقبل أي نقطة رمز للأشعة فوق البنفسجية
مدخل. إذا كانت نقطة الرمز أكبر من 255 ، يتم استخدام قواعد Unicode لتحديد ما إذا كانت كذلك
في فئة الشخصية. على سبيل المثال، "isWORDCHAR_uni(0x100) "تُرجع TRUE ، لأن 0x100 هي
LATIN CAPITAL LETTER A مع MACRON في Unicode ، وهو حرف كلمة.

المتغير "isFOO_utf8" يشبه "isFOO_uni" ، لكن الإدخال هو مؤشر إلى (المعروف أن
منسقة بشكل جيد) سلسلة مشفرة UTF-8 ("U8 *" أو "char *"). تصنيف فقط
يتم اختبار الحرف الأول (ربما متعدد البايت) في السلسلة.

المتغير "isFOO_LC" يشبه المتغيرين "isFOO_A" و "isFOO_L1" ، لكن النتيجة مبنية
على الموقع الحالي ، وهو ما يرمز إليه "LC" في الاسم. إذا كان بإمكان Perl تحديد
أن الإعدادات المحلية الحالية هي لغة UTF-8 ، وتستخدم قواعد Unicode المنشورة ؛ خلاف ذلك،
يستخدم وظيفة مكتبة C التي تعطي التصنيف المسمى. على سبيل المثال،
"isDIGIT_LC ()" عندما لا تكون في لغة UTF-8 تُرجع نتيجة استدعاء "isdigit ()".
يتم إرجاع FALSE دائمًا إذا كان الإدخال لا يتناسب مع ثماني بتات. على بعض المنصات حيث
من المعروف أن وظيفة مكتبة C معيبة ، وتغير Perl نتيجتها لتتبع
قواعد معيار POSIX.

المتغير "isFOO_LC_uvchr" مثل "isFOO_LC" ، ولكن يتم تعريفه على أي UV. تقوم بإرجاع ملف
مثل "isFOO_LC" لنقاط رمز الإدخال الأقل من 256 ، وإرجاع الترميز الثابت ، وليس-
تتأثر بالإعدادات المحلية ، نتائج Unicode للأكبر.

المتغير "isFOO_LC_utf8" يشبه "isFOO_LC_uvchr" ، لكن الإدخال هو مؤشر إلى (معروف
لتكون جيدة التكوين) سلسلة مشفرة UTF-8 ("U8 *" أو "char *"). تصنيف عادل
يتم اختبار الحرف الأول (ربما متعدد البايت) في السلسلة.

isALPHA تُرجع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد أبجديًا أم لا
حرف مماثل لـ "m / [[: alpha:]] /". انظر الجزء العلوي من هذا القسم للحصول على ملف
شرح المتغيرات "isALPHA_A" ، "isALPHA_L1" ، "isALPHA_uni" ، "isALPHA_utf8" ،
"isALPHA_LC" و "isALPHA_LC_uvchr" و "isALPHA_LC_utf8".

منطقية isALPHA (شار تش)

isalphanUMERIC
تُرجع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد إما و
حرف أبجدي أو رقم عشري ، مشابه لـ "m / [[: alnum:]] /". انظر إلى الأعلى
من هذا القسم للحصول على شرح للمتغيرات "isALPHANUMERIC_A" ،
"isALPHANUMERIC_L1" ، "isALPHANUMERIC_uni" ، "isALPHANUMERIC_utf8" ،
"isALPHANUMERIC_LC" و "isALPHANUMERIC_LC_uvchr" و "isALPHANUMERIC_LC_utf8".

منطقية هيالفانوميرك (شار تش)

isASCII تُرجع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد واحدًا من 128
الأحرف في مجموعة أحرف ASCII ، مماثلة لـ "m / [[: ascii:]] /". على غير
أنظمة ASCII الأساسية ، تقوم بإرجاع TRUE إذا كان هذا الحرف يتوافق مع ASCII
شخصية. المتغيرات "isASCII_A ()" و "isASCII_L1 ()" متطابقة مع
"isASCII ()". انظر أعلى هذا القسم للحصول على شرح للمتغيرات
"isASCII_uni" و "isASCII_utf8" و "isASCII_LC" ​​و "isASCII_LC_uvchr" و
"isASCII_LC_utf8". لاحظ ، مع ذلك ، أن بعض الأنظمة الأساسية لا تحتوي على مكتبة C
روتين "isascii ()". في هذه الحالات ، المتغيرات التي تحتوي أسماؤها على "LC" هي
نفس تلك المقابلة بدون.

لاحظ أيضًا أنه نظرًا لأن جميع أحرف ASCII هي UTF-8 ثابتة (بمعنى أنها
لها نفس التمثيل بالضبط (دائمًا بايت واحد) سواء تم ترميزها في UTF-8
أم لا) ، فإن "isASCII" ستعطي النتائج الصحيحة عند استدعائها بأي بايت بأي بايت
سلسلة مشفرة أم لا بتنسيق UTF-8. وبالمثل فإن "isASCII_utf8" سيعمل بشكل صحيح
على أي سلسلة مشفرة أو غير مشفرة بتنسيق UTF-8.

منطقية isASCII (شار الفصل)

isBLANK تُرجع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد حرفًا أم لا
يعتبر فارغًا ، مشابهًا لـ "m / [[: blank:]] /". انظر الى الجزء العلوي من هذا
قسم لشرح المتغيرات "isBLANK_A" ، "isBLANK_L1" ، "isBLANK_uni" ،
"isBLANK_utf8" و "isBLANK_LC" و "isBLANK_LC_uvchr" و "isBLANK_LC_utf8". ملحوظة،
ومع ذلك ، أن بعض الأنظمة الأساسية لا تحتوي على روتين مكتبة C "isblank ()". في
في هذه الحالات ، فإن المتغيرات التي تحتوي أسماؤها على "LC" هي نفسها مثل
المقابلة دون.

منطقية isBLANK (شار تش)

isCNTRL تُرجع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد عنصر تحكم أم لا
حرف مماثل لـ "m / [[: cntrl:]] /". انظر الجزء العلوي من هذا القسم للحصول على ملف
شرح المتغيرات "isCNTRL_A" ، "isCNTRL_L1" ، "isCNTRL_uni" ، "isCNTRL_utf8" ،
"isCNTRL_LC" و "isCNTRL_LC_uvchr" و "isCNTRL_LC_utf8" على الأنظمة الأساسية EBCDIC ،
تريد دائمًا استخدام المتغير "isCNTRL_L1".

منطقية isCNTRL (شار تش)

isDIGIT تُرجع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد رقمًا أم لا
إلى "m / [[: digit:]] /". المتغيرات "isDIGIT_A" و "isDIGIT_L1" متطابقة مع
"isDIGIT". انظر أعلى هذا القسم للحصول على شرح للمتغيرات
"isDIGIT_uni" و "isDIGIT_utf8" و "isDIGIT_LC" و "isDIGIT_LC_uvchr" و
"isDIGIT_LC_utf8".

منطقية isDIGIT (char ch)

isGRAPH يعيد قيمة منطقية تشير إلى ما إذا كان الحرف المحدد رسمًا أم لا
حرف مماثل لـ "m / [[: graph:]] /". انظر الجزء العلوي من هذا القسم للحصول على ملف
شرح المتغيرات "isGRAPH_A" ، "isGRAPH_L1" ، "isGRAPH_uni" ، "isGRAPH_utf8" ،
"isGRAPH_LC" و "isGRAPH_LC_uvchr" و "isGRAPH_LC_utf8".

منطقية isGRAPH (شار تش)

isIDCONT
إرجاع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد يمكن أن يكون الثاني أم
الشخصية التالية للمعرف. هذا قريب جدًا ، ولكن ليس تمامًا
نفس خاصية Unicode الرسمية "XID_Continue". الفرق هو أن هذا
يعود صحيحًا فقط إذا كان حرف الإدخال يطابق أيضًا "isWORDCHAR". انظر إلى الأعلى
من هذا القسم للحصول على شرح للمتغيرات "isIDCONT_A" ، "isIDCONT_L1" ،
"isIDCONT_uni" و "isIDCONT_utf8" و "isIDCONT_LC" و "isIDCONT_LC_uvchr" و
"isIDCONT_LC_utf8".

منطقية isIDCONT (char ch)

هو الأول
إرجاع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد يمكن أن يكون الأول
طابع المعرف. هذا قريب جدًا من ملف
خاصية Unicode الرسمية "XID_Start". الفرق هو أن هذا يعود صحيحًا
فقط إذا تطابق حرف الإدخال أيضًا مع "isWORDCHAR". انظر الى الجزء العلوي من هذا
قسم لشرح المتغيرات "isIDFIRST_A" ، "isIDFIRST_L1" ،
"isIDFIRST_uni" ، "isIDFIRST_utf8" ، "isIDFIRST_LC" ، "isIDFIRST_LC_uvchr" ، و
"isIDFIRST_LC_utf8".

منطقية isIDFIRST (شار تش)

isLOWER تُرجع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد حرفًا صغيرًا
حرف مماثل لـ "m / [[: lower:]] /". انظر الجزء العلوي من هذا القسم للحصول على ملف
شرح المتغيرات "isLOWER_A" ، "isLOWER_L1" ، "isLOWER_uni" ، "isLOWER_utf8" ،
"isLOWER_LC" و "isLOWER_LC_uvchr" و "isLOWER_LC_utf8".

منطقي منخفض (شار تش)

isOCTAL تُرجع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد رقمًا ثمانيًا أم لا ،
[0-7]. المتغيران الوحيدان هما "isOCTAL_A" و "isOCTAL_L1" ؛ كل متطابق
إلى "isOCTAL".

منطقي متساوي (شار تش)

isPRINT تُرجع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد قابلاً للطباعة
حرف مماثل لـ "m / [[: print:]] /". انظر الجزء العلوي من هذا القسم للحصول على ملف
شرح المتغيرات "isPRINT_A" ، "isPRINT_L1" ، "isPRINT_uni" ، "isPRINT_utf8" ،
"isPRINT_LC" و "isPRINT_LC_uvchr" و "isPRINT_LC_utf8".

منطقية isPRINT (char ch)

ISPSXSPC
(اختصار لـ Posix Space) بدءًا من 5.18 ، يكون هذا مطابقًا في جميع أشكاله لـ
وحدات ماكرو "isSPACE ()" المقابلة. الأشكال المحلية لهذا الماكرو هي
متطابقة مع نماذج "isSPACE ()" المقابلة لها في جميع إصدارات Perl. في
الإصدارات السابقة للإصدار 5.18 ، تختلف النماذج غير المحلية عن نماذج "isSPACE ()" الخاصة بها
فقط من حيث أن نماذج "isSPACE ()" لا تتطابق مع علامة التبويب العمودي ، و
نماذج "isPSXSPC ()" تفعل. وإلا فهي متطابقة. وبالتالي هذا الماكرو
مماثل لما يطابق "m / [[: space:]] /" في التعبير العادي. انظر إلى الأعلى
من هذا القسم للحصول على شرح للمتغيرات "isPSXSPC_A" ، "isPSXSPC_L1" ،
"isPSXSPC_uni" و "isPSXSPC_utf8" و "isPSXSPC_LC" و "isPSXSPC_LC_uvchr" و
"isPSXSPC_LC_utf8".

منطقي هو PSXSPC (char ch)

isPUNCT تُرجع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد علامة ترقيم أم لا
حرف مماثل لـ "m / [[: punct:]] /". لاحظ أن تعريف ما هو
علامات الترقيم ليست مباشرة كما قد يرغب المرء. راجع "حرف POSIX
الفئات "في perlrecharclass للحصول على التفاصيل. انظر أعلى هذا القسم للحصول على ملف
شرح المتغيرات "isPUNCT_A" ، "isPUNCT_L1" ، "isPUNCT_uni" ، "isPUNCT_utf8" ،
"isPUNCT_LC" و "isPUNCT_LC_uvchr" و "isPUNCT_LC_utf8".

منطقية isPUNCT (شار تش)

isSPACE تُرجع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد عبارة عن مسافة بيضاء
شخصية. هذا مشابه لما يطابقه "m / \ s /" في التعبير العادي.
بدءًا من Perl 5.18 ، يطابق هذا أيضًا ما يفعله "m / [[: space:]] /". قبل ذ لك
5.18 ، فقط الأشكال المحلية لهذا الماكرو (تلك التي تحتوي على "LC" في أسمائها)
يتطابق بدقة مع ما يفعله "m / [[: space:]] /". في تلك الإصدارات ، فقط
الاختلاف ، في المتغيرات غير المحلية ، هو أن "isSPACE ()" لا يتطابق مع ملف
علامة تبويب عمودية. (راجع "isPSXSPC" لمعرفة الماكرو الذي يطابق علامة تبويب عمودية في الكل
الإصدارات.) راجع الجزء العلوي من هذا القسم للحصول على شرح للمتغيرات
"isSPACE_A" ، "isSPACE_L1" ، "isSPACE_uni" ، "isSPACE_utf8" ، "isSPACE_LC" ،
"isSPACE_LC_uvchr" ، و "isSPACE_LC_utf8".

منطقية isSPACE (char ch)

isUPPER إرجاع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد أحرفًا كبيرة
حرف مماثل لـ "m / [[: upper:]] /". انظر الجزء العلوي من هذا القسم للحصول على ملف
شرح المتغيرات "isUPPER_A" ، "isUPPER_L1" ، "isUPPER_uni" ، "isUPPER_utf8" ،
"isUPPER_LC" و "isUPPER_LC_uvchr" و "isUPPER_LC_utf8".

منطقية isUPPER (شار تش)

isWORDCHAR
إرجاع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد هو حرف أم لا
هي حرف كلمة ، مشابه لما يتطابق مع "m / \ w /" و "m / [[: word:]] /" في
تعبير عادي. حرف الكلمة هو حرف أبجدي ، رقم عشري ،
حرف ترقيم متصل (مثل شرطة سفلية) ، أو حرف "علامة"
التي تعلق على واحدة من هؤلاء (مثل نوع من اللهجة). "isALNUM ()" هو
تم توفير مرادف للتوافق مع الإصدارات السابقة ، على الرغم من تضمين حرف الكلمة
أكثر من المعنى الأبجدي الرقمي للغة C القياسي. انظر الى الجزء العلوي من هذا
قسم لشرح المتغيرات "isWORDCHAR_A" ، "isWORDCHAR_L1" ،
"isWORDCHAR_uni" و "isWORDCHAR_utf8". "isWORDCHAR_LC" ، "isWORDCHAR_LC_uvchr" ،
و "isWORDCHAR_LC_utf8" كما هو موصوف هناك ، ولكن بالإضافة إلى ذلك يتضمن
تسطير أصلي للمنصة.

منطقية isWORDCHAR (char ch)

isXDIGIT
إرجاع قيمة منطقية تشير إلى ما إذا كان الحرف المحدد سداسي عشري
رقم. في نطاق ASCII ، تكون هذه "[0-9A-Fa-f]". المتغيرات "isXDIGIT_A ()" و
"isXDIGIT_L1 ()" مماثل لـ "isXDIGIT ()". انظر الجزء العلوي من هذا القسم للحصول على ملف
شرح المتغيرات "isXDIGIT_uni" ، "isXDIGIT_utf8" ، "isXDIGIT_LC" ،
"isXDIGIT_LC_uvchr" و "isXDIGIT_LC_utf8".

منطقي isXDIGIT (شار تش)

استنساخ an مترجم


perl_clone
أنشئ مترجمًا جديدًا وأعده عن طريق استنساخ المترجم الحالي.

يأخذ perl_clone هذه العلامات كمعلمات:

CLONEf_COPY_STACKS - معتاد على نسخ الحزم أيضًا ، بدونها نحن فقط
استنساخ البيانات وصفر الأكوام ، فباستخدامها نقوم بنسخ المكدسات والبيرل الجديد
المترجم الفوري جاهز للتشغيل في نفس النقطة بالضبط مثل السابقة. ال
يستخدم كود pseudo-fork COPY_STACKS بينما لا يتم إنشاء الخيوط.

CLONEf_KEEP_PTR_TABLE - يحتفظ perl_clone بجدول ptr_table مع مؤشر القديم
المتغير كمفتاح والمتغير الجديد كقيمة ، وهذا يسمح له بالتحقق مما إذا كان
تم استنساخ شيء ما ولم يتم استنساخه مرة أخرى ، بل استخدم فقط القيمة و
زيادة refcount. إذا لم يتم تعيين KEEP_PTR_TABLE ، فسيقتل perl_clone ملف
ptr_table باستخدام الوظيفة "ptr_table_free (PL_ptr_table) ؛ PL_ptr_table = NULL ؛" ،
سبب الاحتفاظ بها هو إذا كنت تريد خداع بعض المتغيرات الخاصة بك
خارج مسح بيرل للرسم البياني ، مثال على هذا الرمز هو في thread.xs create.

CLONEf_CLONE_HOST - هذا شيء win32 ، يتم تجاهله في نظام التشغيل Unix ، كما يقول perls
كود win32host (وهو c ++) لاستنساخ نفسه ، هذا مطلوب على win32 إذا كنت تريد
لتشغيل خيطين في نفس الوقت ، إذا كنت تريد فقط القيام ببعض الأشياء في ملف
افصل مترجم perl ثم تخلص منه وأعد إلى المترجم الأصلي ،
لا داعي لفعل أي شيء.

PerlInterpreter * perl_clone (
PerlInterpreter * proto_perl ،
أعلام الأشعة فوق البنفسجية
)

وقت الترجمة نطاق السنانير


تعطيل
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

قم بتعطيل إدخال في هيكل BHK هذا مؤقتًا ، عن طريق مسح
العلم. التي هو رمز مميز للمعالج المسبق يشير إلى الإدخال المطلوب تعطيله.

باطل BhkDISABLE (BHK * hk ، أي)

بهكنابل
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

أعد تمكين إدخال في بنية BHK هذه ، عن طريق تعيين العلم المناسب. التي
هو رمز مميز للمعالج المسبق يشير إلى الإدخال المطلوب تمكينه. هذا سوف يؤكد (تحت
-DDEBUGING) إذا كان الإدخال لا يحتوي على مؤشر صالح.

باطل BhkENABLE (BHK * hk ، أي)

BhkENTRY_set
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

قم بتعيين إدخال في هيكل BHK ، وقم بتعيين العلامات للإشارة إلى أنه صالح.
التي هو رمز مميز للمعالجة المسبقة يشير إلى الإدخال الذي يجب تعيينه. نوع من PTR
يعتمد على الدخول.

مجموعة BhkENTRY_set باطلة (BHK * hk ، والتي ، باطل * ptr)

blockhook_ تسجيل
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

قم بتسجيل مجموعة من الخطافات ليتم استدعاؤها عندما يتغير نطاق Perl المعجمي في
وقت الترجمة. راجع "خطافات نطاق وقت الترجمة" في perlguts.

ملاحظة: يجب تسمية هذه الوظيفة صراحةً باسم Perl_blockhook_register بامتداد
aTHX_ المعلمة.

باطل Perl_blockhook_register (pTHX_ BHK * hk)

COP تلميح تجزئات


cophh_2hv
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يولد ويعيد تجزئة Perl قياسية تمثل المجموعة الكاملة للمفتاح / القيمة
أزواج في الشرطي تلميحات التجزئة cophh. الأعلام غير مستخدم حاليًا ويجب أن يكون صفرًا.

HV * cophh_2hv (const COPHH * cophh ، U32 flags)

cophh_copy
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

قم بعمل وإرجاع نسخة كاملة من تجزئة تلميحات الشرطي cophh.

COPHH * cophh_copy (COPHH * cophh)

cophh_delete_pv
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مثل "cophh_delete_pvn" ، ولكنه يأخذ سلسلة منتهية في nul بدلاً من a
زوج سلسلة / طول.

COPHH * cophh_delete_pv (const COPHH * cophh ،
مفتاح const char * ، تجزئة U32 ،
أعلام U32)

cophh_delete_pvn
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

احذف مفتاحًا والقيمة المرتبطة به من تجزئة تلميحات الشرطي cophhوالعودة
التجزئة المعدلة. بشكل عام ، لا يكون مؤشر التجزئة الذي تم إرجاعه هو نفس ملف
مؤشر التجزئة الذي تم تمريره. يتم استهلاك تجزئة الإدخال بواسطة الوظيفة ، و
يجب عدم استخدام المؤشر إليه لاحقًا. استخدم "cophh_copy" إذا كنت بحاجة
كلا التجزئات.

يتم تحديد المفتاح بواسطة مفتاح كيلين. إذا الأعلام يحتوي على بت "COPHH_KEY_UTF8"
مجموعة ، يتم تفسير الثماني بتات الرئيسية على أنها UTF-8 ، وإلا يتم تفسيرها على أنها
لاتيني -1. مزيج هي تجزئة محسوبة مسبقًا لسلسلة المفاتيح ، أو صفر إذا لم تكن كذلك
محسوبة مسبقا.

COPHH * cophh_delete_pvn (COPHH * cophh ،
const char * keypv ،
مفتاح STRLEN ، تجزئة U32 ،
أعلام U32)

cophh_delete_pvs
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مثل "cophh_delete_pvn" ، لكنه يأخذ سلسلة حرفية بدلاً من سلسلة / طول
زوج ، ولا تجزئة مسبقة الحساب.

COPHH * cophh_delete_pvs (const COPHH * cophh ،
مفتاح const char * ، أعلام U32)

cophh_delete_sv
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مثل "cophh_delete_pvn" ، لكنه يأخذ عددًا من Perl بدلاً من زوج سلسلة / طول.

COPHH * cophh_delete_sv (const COPHH * cophh ، SV * key ،
تجزئة U32 وأعلام U32)

cophh_fetch_pv
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مثل "cophh_fetch_pvn" ، ولكنه يأخذ سلسلة منتهية في nul بدلاً من a
زوج سلسلة / طول.

SV * cophh_fetch_pv (const COPHH * cophh ،
مفتاح const char * ، تجزئة U32 ،
أعلام U32)

cophh_fetch_pvn
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

ابحث عن الإدخال في تجزئة تلميحات الشرطي cophh بالمفتاح المحدد بواسطة مفتاح
كيلين. إذا الأعلام لديه مجموعة بت "COPHH_KEY_UTF8" ، يتم تفسير الثماني بتات الرئيسية
كـ UTF-8 ، وإلا فسيتم تفسيرها على أنها لاتينية -1. مزيج هو تجزئة محسوبة مسبقًا
من سلسلة المفاتيح ، أو صفر إذا لم يتم حسابها مسبقًا. يعود بشري
نسخة قياسية من القيمة المرتبطة بالمفتاح ، أو & PL_sv_placeholder إذا كان هناك
لا توجد قيمة مرتبطة بالمفتاح.

SV * cophh_fetch_pvn (const COPHH * cophh ،
const char * keypv ،
مفتاح STRLEN ، تجزئة U32 ،
أعلام U32)

cophh_fetch_pvs
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مثل "cophh_fetch_pvn" ، لكنه يأخذ سلسلة حرفية بدلاً من سلسلة / طول
زوج ، ولا تجزئة مسبقة الحساب.

SV * cophh_fetch_pvs (const COPHH * cophh ،
مفتاح const char * ، أعلام U32)

cophh_fetch_sv
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مثل "cophh_fetch_pvn" ، لكنه يأخذ عددًا من Perl بدلاً من زوج سلسلة / طول.

SV * cophh_fetch_sv (const COPHH * cophh ، SV * key ،
تجزئة U32 وأعلام U32)

cophh_free
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

تجاهل تجزئة شرطي تلميحات cophh، وتحرير جميع الموارد المرتبطة به.

cophh_free باطل (COPHH * cophh)

cophh_new_empty
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

إنشاء وإرجاع تجزئة تلميحات شرطي جديدة لا تحتوي على إدخالات.

COPHH * cophh_new_empty ()

cophh_store_pv
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مثل "cophh_store_pvn" ، ولكنه يأخذ سلسلة منتهية في nul بدلاً من a
زوج سلسلة / طول.

COPHH * cophh_store_pv (const COPHH * cophh ،
مفتاح const char * ، تجزئة U32 ،
قيمة SV * ، أعلام U32)

cophh_store_pvn
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يخزن قيمة مرتبطة بمفتاح في تجزئة تلميحات الشرطي cophhوالعودة
التجزئة المعدلة. بشكل عام ، لا يكون مؤشر التجزئة الذي تم إرجاعه هو نفس ملف
مؤشر التجزئة الذي تم تمريره. يتم استهلاك تجزئة الإدخال بواسطة الوظيفة ، و
يجب عدم استخدام المؤشر إليه لاحقًا. استخدم "cophh_copy" إذا كنت بحاجة
كلا التجزئات.

يتم تحديد المفتاح بواسطة مفتاح كيلين. إذا الأعلام يحتوي على بت "COPHH_KEY_UTF8"
مجموعة ، يتم تفسير الثماني بتات الرئيسية على أنها UTF-8 ، وإلا يتم تفسيرها على أنها
لاتيني -1. مزيج هي تجزئة محسوبة مسبقًا لسلسلة المفاتيح ، أو صفر إذا لم تكن كذلك
محسوبة مسبقا.

قيمنا هي القيمة العددية التي يجب تخزينها لهذا المفتاح. قيمنا تم نسخه بواسطة هذا
وظيفة ، وبالتالي لا تأخذ ملكية أي إشارة إليها ، وبعد ذلك
لن تنعكس التغييرات على الحجم في القيمة المرئية في تلميحات الشرطي
تجزئة. لن يتم تخزين الأنواع المعقدة من العددية بسلامة مرجعية ، ولكن
سيتم إجبارهم على الخيوط.

COPHH * cophh_store_pvn (COPHH * cophh ، const char * keypv ،
مفتاح STRLEN ، تجزئة U32 ،
قيمة SV * ، أعلام U32)

cophh_store_pvs
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مثل "cophh_store_pvn" ، لكنه يأخذ سلسلة حرفية بدلاً من سلسلة / طول
زوج ، ولا تجزئة مسبقة الحساب.

COPHH * cophh_store_pvs (const COPHH * cophh ،
مفتاح الحرف * ، قيمة SV * ،
أعلام U32)

cophh_store_sv
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مثل "cophh_store_pvn" ، لكنه يأخذ عددًا من Perl بدلاً من زوج سلسلة / طول.

COPHH * cophh_store_sv (const COPHH * cophh ، SV * key ،
تجزئة U32 ، قيمة SV * ، أعلام U32)

COP تلميح القراءة


cop_hints_2hv
يولد ويعيد تجزئة Perl قياسية تمثل المجموعة الكاملة من التلميحات
إدخالات في الشرطي شرطي. الأعلام غير مستخدم حاليًا ويجب أن يكون صفرًا.

HV * cop_hints_2hv (const COP * cop، U32 flags)

cop_hints_fetch_pv
مثل "cop_hints_fetch_pvn" ، لكنه يأخذ سلسلة منتهية في nul بدلاً من a
زوج سلسلة / طول.

SV * cop_hints_fetch_pv (const COP * cop ،
مفتاح const char * ، تجزئة U32 ،
أعلام U32)

cop_hints_fetch_pvn
ابحث عن إدخال التلميح في الشرطي شرطي بالمفتاح المحدد بواسطة مفتاح كيلين.
If الأعلام لديها مجموعة بت "COPHH_KEY_UTF8" ، يتم تفسير الثماني بتات الرئيسية على أنها
UTF-8 ، وإلا يتم تفسيرها على أنها لاتينية -1. مزيج هو تجزئة محسوبة مسبقًا لـ
سلسلة المفاتيح ، أو صفر إذا لم يتم حسابها مسبقًا. إرجاع عددي مميت
نسخة من القيمة المرتبطة بالمفتاح ، أو & PL_sv_placeholder إذا لم يكن هناك
القيمة المرتبطة بالمفتاح.

SV * cop_hints_fetch_pvn (const COP * cop ،
const char * keypv ،
مفتاح STRLEN ، تجزئة U32 ،
أعلام U32)

cop_hints_fetch_pvs
مثل "cop_hints_fetch_pvn" ، لكنه يأخذ سلسلة حرفية بدلاً من سلسلة / طول
زوج ، ولا تجزئة مسبقة الحساب.

SV * cop_hints_fetch_pvs (const COP * cop ،
مفتاح const char * ، أعلام U32)

cop_hints_fetch_sv
مثل "cop_hints_fetch_pvn" ، لكنه يأخذ عددًا من لغة Perl بدلاً من سلسلة / طول
الزوج.

SV * cop_hints_fetch_sv (const COP * cop ، SV * key ،
تجزئة U32 وأعلام U32)

Custom مشغلي


custom_op_register
تسجيل مرجع مخصص. راجع "عوامل التشغيل المخصصة" في perlguts.

ملاحظة: يجب تسمية هذه الوظيفة صراحةً باسم Perl_custom_op_register بامتداد
aTHX_ المعلمة.

باطل Perl_custom_op_register (pTHX_
Perl_ppaddr_t ppaddr ،
const XOP * xop)

custom_op_xop
قم بإرجاع بنية XOP لمهمة مخصصة معينة. ينبغي النظر في هذا الماكرو
داخلي لـ OP_NAME ووحدات ماكرو الوصول الأخرى: استخدمها بدلاً من ذلك. هذا الماكرو
لا تستدعي وظيفة. قبل 5.19.6 ، تم تنفيذ هذا كوظيفة.

ملاحظة: يجب تسمية هذه الوظيفة صراحةً باسم Perl_custom_op_xop مع aTHX_
المعلمة.

const XOP * Perl_custom_op_xop (pTHX_ const OP * o)

XopDISABLE
قم بتعطيل عضو XOP مؤقتًا ، عن طريق مسح العلامة المناسبة.

XopDISABLE باطلة (XOP * xop ، والتي)

XopENABLE
إعادة تمكين عضو XOP الذي تم تعطيله.

XopENABLE باطلة (XOP * xop ، والتي)

XopENTRY
قم بإرجاع عضو في بنية XOP. التي هو رمز cpp يشير إلى أي إدخال
لكي ترجع. إذا لم يتم تعيين العضو ، فسيعود هذا إلى قيمة افتراضية. العودة
نوع يعتمد على التي. يقوم هذا الماكرو بتقييم وسيطاته أكثر من مرة. اذا أنت
تستخدم "Perl_custom_op_xop" لاستعادة "XOP *" من "OP *" ، استخدم المزيد
كفاءة "XopENTRYCUSTOM" بدلاً من ذلك.

XopENTRY (XOP * xop ، أي)

XopENTRYCUSTOM
تمامًا مثل "XopENTRY (XopENTRY (Perl_custom_op_xop (aTHX_ o))" ولكن أكثر
فعال. ال التي المعلمة مماثلة لـ "XopENTRY".

XopENTRYCUSTOM (const OP * o ، التي)

XopENTRY_set
قم بتعيين عضو في هيكل XOP. التي هو رمز cpp يشير إلى أي إدخال
تعيين. راجع "عوامل التشغيل المخصصة" في perlguts للحصول على تفاصيل حول الأعضاء المتاحين
وكيف يتم استخدامها. يقوم هذا الماكرو بتقييم حجته أكثر من مرة.

XopENTRY_set باطلة (XOP * xop ، أي قيمة)

اكسوبفلاج
قم بإرجاع أعلام XOP.

U32 XopFLAGS (XOP * xop)

CV تلاعب وظائف


يوثق هذا القسم وظائف لمعالجة السير الذاتية التي هي عبارة عن قيم رمزية أو إجراءات فرعية.
لمزيد من المعلومات ، انظر perlguts.

caller_cx
ما يعادل XSUB- كاتب المتصل (). هيكل "PERL_CONTEXT" الذي تم إرجاعه
يمكن استجوابها للعثور على جميع المعلومات التي أعادها "المتصل" إلى Perl.
لاحظ أن XSUBs لا تحصل على إطار مكدس ، لذلك سيعود "caller_cx (0، NULL)"
معلومات عن كود Perl المحيط مباشرة.

تتخطى هذه الوظيفة الاستدعاءات التلقائية لـ & DB :: sub التي يتم إجراؤها نيابة عن
المصحح. إذا كان إطار المكدس المطلوب عبارة عن فرعي تم استدعاؤه بواسطة "DB :: sub" ، فسيتم إرجاع
ستكون القيمة هي الإطار الخاص باستدعاء "DB :: sub" ، حيث أن ذلك يحتوي على السطر الصحيح
رقم / إلخ. لموقع الاتصال. لو com.dbcxp غير "NULL" ، سيتم تعيينه على
مؤشر إلى إطار المكالمة الفرعية نفسها.

const PERL_CONTEXT * caller_cx (
مستوى I32 ،
const PERL_CONTEXT ** dbcxp
)

CvSTASH يقوم بإرجاع مخزون السيرة الذاتية. المخبأ هو تجزئة جدول الرموز ، التي تحتوي على
متغيرات نطاق الحزمة في الحزمة حيث تم تعريف الروتين الفرعي. ل
مزيد من المعلومات ، انظر perlguts.

هذا أيضًا له استخدام خاص مع غواصات XS AUTOLOAD. راجع "التحميل التلقائي باستخدام XSUBs"
في بيرلجوتس.

HV * CvSTASH (CV * cv)

find_runcv
حدد موقع السيرة الذاتية المطابق للتنفيذ أو التقييم الفرعي المنفذ حاليًا. إذا كانت db_seqp هي
non_null ، تخطى السير الذاتية الموجودة في حزمة قاعدة البيانات واملأ * db_seqp مع الشرطي
الرقم التسلسلي في النقطة التي تم فيها إدخال رمز DB ::. (هذا يسمح
مصححات الأخطاء للتقييم في نطاق نقطة التوقف بدلاً من نطاق
المصحح نفسه.)

السيرة الذاتية * find_runcv (U32 * db_seqp)

get_cv يستخدم "strlen" للحصول على طول "الاسم" ، ثم استدعاء "get_cvn_flags".

ملاحظة: تم إهمال شكل perl_ لهذه الوظيفة.

السيرة الذاتية * get_cv (اسم الحرف * الاسم ، أعلام I32)

get_cvn_flags
تُرجع السيرة الذاتية لروتين Perl الفرعي المحدد. يتم تمرير "الأعلام" إلى
"gv_fetchpvn_flags". إذا تم تعيين "GV_ADD" وكان روتين Perl غير موجود
ثم سيتم الإعلان عنه (والذي له نفس تأثير قول "الاسم الفرعي ؛"). لو
لم يتم تعيين "GV_ADD" والروتين الفرعي غير موجود ثم يتم إرجاع NULL.

ملاحظة: تم إهمال شكل perl_ لهذه الوظيفة.

السيرة الذاتية * get_cvn_flags (اسم الحرف * ، STRLEN len ،
أعلام I32)

التصحيح المرافق


تفريغ_جميع
لتفريغ optree بالكامل من البرنامج الحالي بدءًا من "PL_main_root" إلى
"ستدير". يفرغ أيضًا optrees لجميع الإجراءات الفرعية المرئية في "PL_defstash".

باطل dump_all ()

تفريغ_حزم
يفرغ optrees لجميع الإجراءات الفرعية المرئية في "stash".

void dump_packsubs (const HV * stash)

op_dump يفرغ optree بدءًا من OP "o" إلى "STDERR".

op_dump باطل (const OP * o)

sv_dump لتفريغ محتويات SV إلى مقبض الملفات "STDERR".

للحصول على مثال لإخراجها ، انظر Devel :: Peek.

sv_dump باطل (SV * sv)

العرض تفريغ وظائف


pv_display
على غرار

pv_escape (dsv ، pv ، cur ، pvlim ، PERL_PV_ESCAPE_QUOTE) ؛

فيما عدا أنه سيتم إلحاق "\ 0" إضافي بالسلسلة عند len> cur و
pv [cur] هي "\ 0".

لاحظ أن السلسلة النهائية قد تصل إلى 7 أحرف أطول من pvlim.

char * pv_display (SV * dsv ، const char * pv ، STRLEN cur ،
سترلين لين ، سترلين بفليم)

pv_escape
يهرب على الأكثر من أحرف "العد" الأولى من pv ويضع النتائج في dsv مثل
أن حجم السلسلة التي تم تجاوزها لن يتجاوز أحرف "الحد الأقصى" ولن يتعدى ذلك
تحتوي على أي تسلسلات هروب غير مكتملة. سيكون عدد البايتات التي تم هروبها
تم إرجاعها في المعلمة STRLEN * escaped إذا لم تكن فارغة. عندما يكون ملف dsv
المعلمة خالية ولا يحدث أي هروب بالفعل ، ولكن عدد البايتات التي قد تحدث
سيتم احتساب هروبها إذا لم تكن فارغة.

إذا كانت العلامات تحتوي على PERL_PV_ESCAPE_QUOTE ، فستكون أي علامات اقتباس مزدوجة في السلسلة
يهرب أيضا.

عادةً ما يتم مسح SV قبل تحضير السلسلة التي تم تسريبها ، ولكن عندما يتم ذلك
تم تعيين PERL_PV_ESCAPE_NOCLEAR ولن يحدث هذا.

إذا تم تعيين PERL_PV_ESCAPE_UNI ، فسيتم التعامل مع سلسلة الإدخال على أنها UTF-8 إذا
تم تعيين PERL_PV_ESCAPE_UNI_DETECT ثم يتم فحص سلسلة الإدخال باستخدام
"is_utf8_string ()" لتحديد ما إذا كان UTF-8.

إذا تم تعيين PERL_PV_ESCAPE_ALL ، فسيتم إخراج جميع أحرف الإدخال باستخدام "\ x01F1"
أحرف هروب النمط ، وإلا إذا تم تعيين PERL_PV_ESCAPE_NONASCII ، فإن أحرف غير ASCII فقط
سيتم الهروب باستخدام هذا النمط ؛ وإلا ، فإن الأحرف فقط فوق 255 ستكون كذلك
هرب ستستخدم أحرف أخرى غير قابلة للطباعة أنماط هروب ثمانية أو شائعة مثل
"\ن". خلاف ذلك ، إذا كانت PERL_PV_ESCAPE_NOBACKSLASH ، فإن جميع الأحرف الأقل من 255 ستكون
يتم التعامل معها على أنها قابلة للطباعة وسيتم إخراجها على أنها حرفية.

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

إذا تم تعيين PERL_PV_ESCAPE_RE ، فسيكون حرف الهروب المستخدم "٪" وليس
"\\". هذا لأن regexes غالبًا ما تحتوي على تسلسلات مائلة للخلف ، بينما
"٪" ليست سمة شائعة بشكل خاص في الأنماط.

إرجاع مؤشر إلى النص الذي تم تجاوزه كما تم الاحتفاظ به بواسطة dsv.

char * pv_escape (SV * dsv ، char const * const str ،
عدد STRLEN الثابت ، STRLEN كحد أقصى ،
نجا STRLEN * const ،
أعلام const U32)

pv_pretty
يحول سلسلة إلى شيء أنيق ، ويتعامل مع الهروب عبر pv_escape ()
ودعم الاقتباس والحذف.

إذا تم تعيين علامة PERL_PV_PRETTY_QUOTE ، فسيتم وضع علامة اقتباس مزدوجة للنتيجة
هرب أي اقتباس مزدوج في السلسلة. خلاف ذلك إذا كان PERL_PV_PRETTY_LTGT
يتم تعيين العلم ثم يتم لف النتيجة في أقواس زاوية.

إذا تم تعيين علامة PERL_PV_PRETTY_ELLIPSES ولم يتم
الناتج ثم سيتم إلحاق علامة القطع "..." بالسلسلة. لاحظ أن هذا
يحدث بعد أن تم اقتباسه.

إذا كانت start_color غير خالية ، فسيتم إدراجها بعد عرض الأسعار الافتتاحي (if
هناك واحد) ولكن قبل النص الهارب. إذا كان end_color غير فارغ ، فسيكون كذلك
يتم إدراجها بعد النص الذي تم تجاوزه ولكن قبل أي علامات اقتباس أو علامات حذف.

إرجاع مؤشر إلى النص المُحدد كما هو مثبت بواسطة dsv.

char * pv_pretty (SV * dsv ، char const * const str ،
عدد STRLEN الثابت ، STRLEN كحد أقصى ،
char const * const start_color ،
char const * end_color ،
أعلام const U32)

تضمين وظائف


cv_clone
استنساخ سيرة ذاتية ، وصنع إغلاقًا معجميًا. بروتو تزود النموذج الأولي لـ
الوظيفة: كودها ، وهيكل الوسادة ، والسمات الأخرى. النموذج الأولي
جنبًا إلى جنب مع التقاط المعجمات الخارجية التي تشير إليها الشفرة ، وهي
مأخوذ من المثيل الذي يتم تنفيذه حاليًا من الكود المحيط مباشرةً.

CV * cv_clone (CV * proto)

cv_name يُرجع SV يحتوي على اسم السيرة الذاتية ، لاستخدامه بشكل أساسي في الإبلاغ عن الأخطاء.
قد تكون السيرة الذاتية في الواقع عبارة عن GV بدلاً من ذلك ، وفي هذه الحالة تحمل SV المرتجعة GV's
اسم. يتم التعامل مع أي شيء بخلاف GV أو CV كسلسلة تحتوي بالفعل على
الاسم الفرعي ، ولكن هذا قد يتغير في المستقبل.

يمكن تمرير SV كوسيطة ثانية. إذا كان الأمر كذلك ، فسيتم تعيين الاسم لها
وسوف تعاد. وإلا فإن SV العائد سيكون مميتًا جديدًا.

إذا كان الأعلام قم بتضمين CV_NAME_NOTQUAL ، فلن يتم تضمين اسم الحزمة.
إذا لم تكن الوسيطة الأولى عبارة عن CV ولا GV ، فسيتم تجاهل هذه العلامة (تخضع لـ
يتغيرون).

SV * cv_name (أعلام CV * cv ، SV * sv ، U32)

cv_undef
امسح جميع المكونات النشطة للسيرة الذاتية. يمكن أن يحدث هذا إما عن طريق
صريح "undef & foo" ، أو من خلال عدد المراجع الذي يذهب إلى الصفر. في السابق
في الحالة ، نحتفظ بمؤشر CvOUTSIDE ، بحيث لا يزال بإمكان أي طفل مجهول
اتبع سلسلة النطاق المعجمية الكاملة.

cv_undef باطل (CV * cv)

find_rundefsv
ابحث وأعد المتغير المسمى $ _ في النطاق المعجمي لـ
وظيفة قيد التنفيذ حاليًا. قد يكون هذا المعجم $ _ ، أو خلاف ذلك سيكون
واحد عالمي.

SV * find_rundefsv ()

find_rundefsvoffset
إهمال! من المخطط إزالة هذه الوظيفة من إصدار مستقبلي لـ Perl.
لا تستخدمه للرمز الجديد ؛ إزالته من التعليمات البرمجية الموجودة.

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

ملاحظة: تم إهمال شكل perl_ لهذه الوظيفة.

PADOFFSET find_rundefsvoffset ()

intro_my
تقديم متغيرات "my" للوضع المرئي. يسمى هذا أثناء التحليل في
نهاية كل عبارة لجعل المتغيرات المعجمية مرئية لما يليها
صياغات.

U32 intro_my ()

Load_module
يقوم بتحميل الوحدة النمطية التي يشار إلى اسمها بواسطة جزء السلسلة من الاسم. لاحظ أن
يجب إعطاء اسم الوحدة الفعلي وليس اسم الملف الخاص بها. على سبيل المثال ، "Foo :: Bar" بدلاً من ذلك
من "Foo / Bar.pm". يمكن أن تكون العلامات أيًا من PERL_LOADMOD_DENY أو PERL_LOADMOD_NOIMPORT أو
PERL_LOADMOD_IMPORT_OPS (أو 0 لعدم وجود علامات). ver ، إذا تم تحديده وليس NULL ،
يوفر دلالات إصدار مشابهة لـ "استخدام Foo :: Bar VERSION". اختياري
يمكن استخدام وسيطات SV * اللاحقة لتحديد الوسائط للوحدة النمطية يستورد()
الطريقة ، على غرار "استخدام Foo :: Bar VERSION LIST". يجب إنهاؤها بـ
مؤشر NULL النهائي. لاحظ أنه لا يمكن حذف هذه القائمة إلا عندما يكون ملف
تم استخدام علامة PERL_LOADMOD_NOIMPORT. خلاف ذلك على الأقل NULL واحد
مطلوب مؤشر لتعيين قائمة الاستيراد الافتراضية.

يتم تقليل عدد المراجع لكل معلمة "SV *" محددة.

void load_module (أعلام U32 ، اسم * SV ، SV * ver ، ...)

newPADNAMELIST
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

ينشئ قائمة بأسماء لوحة جديدة. "max" هو أعلى مؤشر للمسافة
المخصصة.

قائمة PADNAMELIST * newPADNAMELIST (size_t max)

جهاز التوجيه الجديد
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

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

PADNAME * newPADNAMEouter (PADNAME * الخارجي)

newPADNAMEpvn
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

ينشئ ويعيد اسم لوحة جديدة. s يجب أن تكون سلسلة UTF8. لا تستخدم هذا
لأسماء الوسادة التي تشير إلى المفردات الخارجية. انظر "newPADNAMEouter".

PADNAME * newPADNAMEpvn (حرف * s ، STRLEN len)

ليس خطافًا
كعب الروتين الذي يوفر خطاف لولب perl_destruct عندما لا توجد خيوط.

int nothreadhook ()

Padnamelist_fetch
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يجلب اسم اللوحة من الفهرس المحدد.

PADNAME * padnamelist_fetch (PADNAMELIST * pnl ،
مفتاح SSize_t)

Padnamelist_store
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يخزن اسم اللوحة (الذي قد يكون فارغًا) في الفهرس المحدد ، مما يؤدي إلى تحرير أي لوحة موجودة
اسم اللوحة في تلك الفتحة.

PADNAME ** padnamelist_store (PADNAMELIST * pnl ،
مفتاح SSize_t ، PADNAME * val)

Pad_add_anon
يخصص مكانًا في لوحة الترجمة حاليًا (عبر "pad_alloc") لملف
وظيفة مجهولة يتم تحديد نطاقها معجمياً داخل التجميع الحالي
وظيفة. الوظيفة ظائفها مرتبط باللوحة ، ورابط "CvOUTSIDE" الخاص به
يتم إضعاف النطاق الخارجي لتجنب حلقة مرجعية.

تمت سرقة عدد مرجعي واحد ، لذلك قد تحتاج إلى إجراء "SvREFCNT_inc (func)".

النوع يجب أن يكون رمز تشغيل يشير إلى نوع العملية التي يتم إدخال اللوحة فيها
من أجل دعم. لا يؤثر هذا على دلالات التشغيل ، ولكنه يُستخدم لتصحيح الأخطاء.

PADOFFSET pad_add_anon (CV * func ، I32 optype)

Pad_add_name_pv
تمامًا مثل "pad_add_name_pvn" ، ولكنها تأخذ سلسلة منتهية بـ nul بدلاً من a
زوج سلسلة / طول.

PADOFFSET pad_add_name_pv (اسم حرف * ، أعلام U32 ،
HV * typestash ، HV * ourstash)

Pad_add_name_pvn
يخصص مكانًا في لوحة التجميع حاليًا لمتغير معجمي مسمى.
يخزن الاسم والبيانات الوصفية الأخرى في جزء الاسم من اللوحة ، ويجعل
الاستعدادات لإدارة النطاق المعجمي للمتغير. ترجع إزاحة
فتحة الوسادة المخصصة.

ناميبف/الاسم تحديد اسم المتغير ، بما في ذلك سيجيل البادئة. لو الطباعة
غير فارغ ، الاسم خاص بمفردات مكتوبة ، وهذا يحدد النوع. لو
com.ourstash غير فارغ ، إنه مرجع معجمي لمتغير الحزمة ، وهذا
يحدد الحزمة. يمكن استخدام الأعلام التالية معًا:

تحدد padadd_OUR بشكل متكرر ما إذا كانت حزمة var
متغير padadd_STATE سيحتفظ بالقيمة باستمرار
padadd_NO_DUP_CHECK تخطي التحقق من التظليل المعجمي

PADOFFSET pad_add_name_pvn (حرف const * namepv ،
اسم STRLEN ، أعلام U32 ،
HV * typestash ، HV * ourstash)

Pad_add_name_sv
تمامًا مثل "pad_add_name_pvn" ، ولكنها تأخذ سلسلة الاسم في شكل SV
بدلاً من زوج سلسلة / طول.

PADOFFSET pad_add_name_sv (اسم * SV ، أعلام U32 ،
HV * typestash ، HV * ourstash)

Pad_alloc
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يخصص مكانًا في لوح الترجمة حاليًا ، ويعيد إزاحة
فتحة الوسادة المخصصة. لم يتم إرفاق اسم مبدئيًا بفتحة اللوحة. com.tmptype هو
مجموعة من الأعلام تشير إلى نوع إدخال اللوحة المطلوب ، والذي سيتم تعيينه في
قيمة SV لإدخال اللوحة المخصصة:

المتغير المعجمي المسمى SVs_PADMY ("my"، "our"، "state")
SVs_PADTMP مخزن مؤقت غير مسمى
SVf_READONLY ثابت مشترك بين مستويات العودية

تم دعم "SVf_READONLY" هنا فقط منذ perl 5.20. للعمل مع في وقت سابق
الإصدارات أيضًا ، استخدم "SVf_READONLY | SVs_PADTMP". "SVf_READONLY" لا يسبب
يتم وضع علامة على SV في فتحة اللوحة للقراءة فقط ، ولكن ببساطة تخبر "pad_alloc" بذلك
it سوف أن تكون للقراءة فقط (من قبل المتصل) ، أو على الأقل يجب معاملتها على هذا النحو.

النوع يجب أن يكون رمز تشغيل يشير إلى نوع العملية التي يتم إدخال اللوحة فيها
من أجل دعم. لا يؤثر هذا على دلالات التشغيل ، ولكنه يُستخدم لتصحيح الأخطاء.

PADOFFSET pad_alloc (I32 optype ، U32 tmptype)

Pad_findmy_pv
تمامًا مثل "pad_findmy_pvn" ، ولكنها تأخذ سلسلة منتهية في nul بدلاً من
زوج سلسلة / طول.

PADOFFSET pad_findmy_pv (اسم حرف * ثابت ، أعلام U32)

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

PADOFFSET pad_findmy_pvn (حرف const char * namepv ،
اسم STRLEN ، أعلام U32)

Pad_findmy_sv
تمامًا مثل "pad_findmy_pvn" ، ولكنها تأخذ سلسلة الاسم في شكل SV
بدلاً من زوج سلسلة / طول.

PADOFFSET pad_findmy_sv (اسم * SV ، أعلام U32)

Pad_setsv
اضبط القيمة عند الإزاحة po في اللوحة الحالية (التجميع أو التنفيذ). استخدم ال
الماكرو PAD_SETSV () بدلا من استدعاء هذه الوظيفة مباشرة.

pad_setsv باطلة (PADOFFSET po، SV * sv)

pad_sv احصل على القيمة عند الإزاحة po في اللوحة الحالية (التجميع أو التنفيذ). استخدم الماكرو
PAD_SV بدلاً من استدعاء هذه الوظيفة مباشرة.

SV * pad_sv (PADOFFSET po)

Pad_tidy
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

رتب لوحة في نهاية تجميع الكود الذي تنتمي إليه. وظائف
يتم إجراؤها هنا: إزالة معظم الأشياء من منصات النماذج الأولية غير الفرعية ؛ اعطيها
أ @_؛ ضع علامة على الموقتات على هذا النحو. نوع يشير إلى نوع الروتين الفرعي:

روتين فرعي عادي padtidy_SUB
النموذج الأولي padtidy_SUBCLONE للإغلاق المعجمي
تنسيق padtidy_FORMAT

pad_tidy باطلة (نوع padtidy_type)

بيرل_alloc
يخصص مترجمًا جديدًا لـ Perl. انظر perlembed.

PerlInterpreter * perl_alloc ()

perl_construct
يقوم بتهيئة مترجم Perl جديد. انظر perlembed.

perl_construct باطل (PerlInterpreter * my_perl)

perl_destruct
يغلق مترجم Perl. انظر perlembed.

int perl_destruct (PerlInterpreter * my_perl)

بيرل_فري
يطلق مترجم Perl. انظر perlembed.

perl_free باطل (PerlInterpreter * my_perl)

perl_parse
يخبر مترجم Perl بتحليل نص Perl. انظر perlembed.

int perl_parse (PerlInterpreter * my_perl ،
XSINIT_t xsinit، int argc،
char ** argv، char ** env)

perl_run
يخبر مترجم Perl بالتشغيل. انظر perlembed.

int perl_run (PerlInterpreter * my_perl)

تتطلب_pv
يخبر Perl بأن "يطلب" الملف المسمى بواسطة وسيطة السلسلة. إنه مشابه ل
تتطلب كود Perl "EVAL" 'ملف $' "". حتى أنها نفذت بهذه الطريقة. يعتبر
باستخدام load_module بدلاً من ذلك.

ملاحظة: تم إهمال شكل perl_ لهذه الوظيفة.

يتطلب_pv باطل (const char * pv)

استثناء معالجة (بسيط) وحدات الماكرو


dXCPT قم بإعداد المتغيرات المحلية الضرورية لمعالجة الاستثناءات. راجع "معالجة الاستثناءات"
في بيرلجوتس.

dXCPT ؛

XCPT_CATCH
يقدم كتلة الصيد. راجع "معالجة الاستثناءات" في perlguts.

XCPT_RETHROW
يعيد استثناء تم اكتشافه مسبقًا. راجع "معالجة الاستثناءات" في perlguts.

XCPT_RETHROW ؛

XCPT_TRY_END
ينتهي بلوك المحاولة. راجع "معالجة الاستثناءات" في perlguts.

XCPT_TRY_START
يبدأ كتلة المحاولة. راجع "معالجة الاستثناءات" في perlguts.

أبحاث المتغيرات


هذه المتغيرات عالمية لعملية كاملة. يتم تقاسمها بين جميع المترجمين الفوريين
وجميع المواضيع في العملية.

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

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

من أجل سلامة الخيط ، يجب ألا تكتب الوحدات النمطية مباشرة إلى هذه المجموعة. بدلا من ذلك ، استخدم
الوظيفة "wrap_op_checker".

PL_keyword_plugin
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مؤشر الوظيفة ، يشير إلى وظيفة تستخدم للتعامل مع الكلمات الأساسية الممتدة. ال
يجب الإعلان عن الوظيفة كـ

int keyword_plugin_function (pTHX_
char * keyword_ptr ، STRLEN keyword_len ،
OP ** op_ptr)

يتم استدعاء الوظيفة من الرمز المميز ، كلما ظهرت كلمة رئيسية محتملة.
تشير "keyword_ptr" إلى الكلمة الموجودة في مخزن الإدخال المؤقت للمحلل ، و "keyword_len"
يعطي طوله انها ليست خالية منتهية. من المتوقع أن يتم فحص الوظيفة
الكلمة ، وربما الحالة الأخرى مثل٪ ^ H ، لتقرر ما إذا كانت تريد ذلك
التعامل معها ككلمة رئيسية موسعة. إذا لم يحدث ذلك ، يجب أن تعود الوظيفة
"KEYWORD_PLUGIN_DECLINE" ، وستستمر عملية المحلل اللغوي العادي.

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

عندما تتم معالجة كلمة رئيسية ، يجب أن تنشئ وظيفة البرنامج المساعد شجرة "OP"
الهياكل ، التي تمثل الكود الذي تم تحليله. يجب أن يكون جذر الشجرة
مخزنة في * op_ptr. تقوم الدالة بعد ذلك بإرجاع ثابت يشير إلى الصيغة النحوية
دور البناء الذي تم تحليله: "KEYWORD_PLUGIN_STMT" إذا كان
عبارة كاملة ، أو "KEYWORD_PLUGIN_EXPR" إذا كانت تعبيرًا. لاحظ أن أ
لا يمكن استخدام بناء العبارة داخل تعبير (ما عدا عبر "do BLOCK" و
ما شابه) ، والتعبير ليس بيانًا كاملاً (يتطلب على الأقل أ
إنهاء فاصلة منقوطة).

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

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

GV وظائف


GV هو هيكل يتوافق مع نوع Perl ، أي * foo. إنه هيكل
يحتوي على مؤشر إلى عدد قياسي أو مصفوفة أو تجزئة إلخ ، بما يتوافق مع $ foo وfoo و٪ foo.

عادةً ما يتم العثور على GVs كقيم في المخبأ (تجزئات جدول الرموز) حيث تخزن Perl
المتغيرات العالمية.

GvAV إرجاع AV من GV.

AV * GvAV (GV * gv)

GvCV إرجاع السيرة الذاتية من GV.

CV * GvCV (GV * gv)

GvHV إرجاع HV من GV.

HV * GvHV (GV * gv)

GvSV إرجاع SV من GV.

SV * GvSV (GV * gv)

gv_const_sv
إذا كان "gv" نوعًا من النوع الذي يكون إدخال روتين فرعي له مؤهلًا للحصول عليه
inlining ، أو "gv" هو مرجع عنصر نائب سيتم ترقيته لمثل هذا
typeglob ، ثم تُرجع القيمة المعادة بواسطة sub. وإلا ، يتم إرجاع NULL.

SV * gv_const_sv (GV * gv)

gv_fetchmeth
مثل "gv_fetchmeth_pvn" ، لكنها تفتقر إلى معلمة الإشارات.

GV * gv_fetchmeth (HV * stash، const char * name،
STRLEN len ، مستوى I32)

gv_fetchmethod_autoload
إرجاع الكرة الأرضية التي تحتوي على روتين فرعي لاستدعاء لاستدعاء الطريقة في ملف
"خبأ". في الواقع ، في وجود التحميل التلقائي ، قد يكون هذا هو الكرة الأرضية لـ
"تحميل تلقائى". في هذه الحالة ، تم إعداد المتغير المقابل $ AUTOLOAD بالفعل.

المعلمة الثالثة "gv_fetchmethod_autoload" تحدد ما إذا كان AUTOLOAD أم لا
يتم إجراء البحث إذا لم يكن الأسلوب المحدد موجودًا: غير الصفر يعني نعم ، انظر
من أجل AUTOLOAD ؛ صفر يعني لا ، لا تبحث عن AUTOLOAD. استدعاء "gv_fetchmethod" هو
يعادل استدعاء "gv_fetchmethod_autoload" مع "تحميل تلقائي" غير صفري
المعلمة.

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

هذه الوظائف لها نفس الآثار الجانبية مثل "gv_fetchmeth" مع "level == 0". ال
ينطبق التحذير من اجتياز GV الذي تم إرجاعه بواسطة "gv_fetchmeth" إلى "call_sv"
على قدم المساواة لهذه الوظائف.

GV * gv_fetchmethod_autoload (HV * stash ،
اسم الحرف * ،
تحميل تلقائي I32)

gv_fetchmeth_autoload
هذا هو الشكل القديم لـ "gv_fetchmeth_pvn_autoload" ، الذي لا يحتوي على معلمات إشارات.

GV * gv_fetchmeth_autoload (HV * stash ،
اسم الحرف * ،
STRLEN len ، مستوى I32)

gv_fetchmeth_pv
تمامًا مثل "gv_fetchmeth_pvn" ، ولكنها تأخذ سلسلة منتهية في nul بدلاً من
زوج سلسلة / طول.

GV * gv_fetchmeth_pv (HV * stash ، const char * name ،
مستوى I32 ، أعلام U32)

gv_fetchmeth_pvn
إرجاع الكرة الأرضية مع "الاسم" المحدد وروتين فرعي محدد أو "NULL". ال
يعيش glob في "المخبأ" المحدد ، أو في المخازن التي يمكن الوصول إليها عبرISA و
عالمي::.

يجب أن تكون الوسيطة "level" إما 0 أو -1. إذا كان "المستوى == 0" ، كأثر جانبي
يُنشئ كرة أرضية مع "الاسم" المحدد في "المخبأ" المحدد والذي في حالة
يحتوي نجاح على اسم مستعار للروتين الفرعي ، ويقوم بإعداد معلومات التخزين المؤقت لهذا
الكرة الأرضية.

القيم المهمة الوحيدة لـ "العلامات" هي GV_SUPER و SVf_UTF8.

يشير GV_SUPER إلى أننا نريد البحث عن الطريقة في الفئات الفائقة من
"خبأ".

قد يكون GV الذي تم إرجاعه من "gv_fetchmeth" إدخالًا لذاكرة التخزين المؤقت للأسلوب ، وهو ليس كذلك
مرئي لكود بيرل. لذلك عند استدعاء "call_sv" ، لا يجب عليك استخدام GV
مباشرة؛ بدلاً من ذلك ، يجب عليك استخدام السيرة الذاتية للطريقة ، والتي يمكن الحصول عليها من
GV مع ماكرو "GvCV".

GV * gv_fetchmeth_pvn (HV * stash ، const char * name ،
سترلين لين ، مستوى I32 ،
أعلام U32)

gv_fetchmeth_pvn_autoload
مثل gv_fetchmeth_pvn ()، ولكنه يبحث أيضًا عن الإجراءات الفرعية المحملة تلقائيًا. يعود أ
الكرة الأرضية للروتين الفرعي.

بالنسبة إلى روتين فرعي تم تحميله تلقائيًا بدون GV ، سيتم إنشاء GV حتى لو كان "المستوى <0".
للحصول على روتين فرعي تم تحميله تلقائيًا بدون كعب ، GvCV () من النتيجة قد تكون صفرا.

حاليًا ، القيمة المهمة الوحيدة لـ "الإشارات" هي SVf_UTF8.

GV * gv_fetchmeth_pvn_autoload (HV * stash ،
اسم الحرف * ،
سترلين لين ، مستوى I32 ،
أعلام U32)

gv_fetchmeth_pv_autoload
تمامًا مثل "gv_fetchmeth_pvn_autoload" ، ولكنها تأخذ سلسلة منتهية nul
بدلاً من زوج سلسلة / طول.

GV * gv_fetchmeth_pv_autoload (HV * stash ،
اسم الحرف * ،
مستوى I32 ، أعلام U32)

gv_fetchmeth_sv
تمامًا مثل "gv_fetchmeth_pvn" ، ولكنها تأخذ سلسلة الاسم في شكل SV
بدلاً من زوج سلسلة / طول.

GV * gv_fetchmeth_sv (HV * stash ، SV * namesv ،
مستوى I32 ، أعلام U32)

gv_fetchmeth_sv_autoload
تمامًا مثل "gv_fetchmeth_pvn_autoload" ، ولكنها تأخذ سلسلة الاسم في شكل
SV بدلاً من زوج سلسلة / طول.

GV * gv_fetchmeth_sv_autoload (HV * stash، SV * namesv،
مستوى I32 ، أعلام U32)

gv_init الشكل القديم من gv_init_pvn (). لا يعمل مع سلاسل UTF8 ، لأنه لا يحتوي على
أعلام المعلمة. إذا تم تعيين المعلمة "multi" ، فسيتم تعيين علامة GV_ADDMULTI
مرت ل gv_init_pvn ().

باطل gv_init (GV * gv، HV * stash، const char * name،
STRLEN len، int multi)

gv_init_pv
مثل gv_init_pvn ()، ولكنها تأخذ سلسلة منتهية في nul للاسم بدلاً من
معلمات حرف * وطول منفصلة.

باطل gv_init_pv (GV * gv، HV * stash، const char * name،
أعلام U32)

gv_init_pvn
يحول الحجمي إلى نوع الخط. هذا نوع لا يمكن السيطرة عليه. تعيين أ
سيتم تعيين الإشارة إليه إلى إحدى فتحاته ، بدلاً من الكتابة فوقه كـ
يحدث مع typeglobs التي أنشأتها SvSetSV. تحويل أي عددية SvOK ()
قد تؤدي إلى نتائج غير متوقعة وهي مخصصة للاستخدام الداخلي لـ Perl.

"gv" هو العدد المطلوب تحويله.

"stash" هي المخزن / الحزمة الأصلية ، إن وجدت.

"الاسم" و "لين" يعطيان الاسم. يجب أن يكون الاسم غير مؤهل ؛ هذا هو ، يجب أن يكون
لا تشمل اسم الحزمة. إذا كان "gv" عنصر مخبأ ، فهو المتصل
مسؤولية التأكد من أن الاسم الذي تم تمريره إلى هذه الوظيفة يطابق اسم
العنصر. إذا لم يكن متطابقًا ، فسيخرج مسك الدفاتر الداخلي في perl
المزامنة.

يمكن تعيين "flags" على SVf_UTF8 إذا كان "name" سلسلة UTF8 ، أو القيمة المرجعة لـ
SvUTF8 (سيفيرت). يمكن أن تأخذ أيضًا علامة GV_ADDMULTI ، مما يعني التظاهر بذلك
تمت رؤية GV من قبل (على سبيل المثال ، قم بإلغاء تحذيرات "تم الاستخدام مرة واحدة").

باطل gv_init_pvn (GV * gv، HV * stash، const char * name،
STRLEN len ، أعلام U32)

gv_init_sv
مثل gv_init_pvn ()، ولكنها تأخذ SV * للاسم بدلاً من حرف منفصل *
ومعلمات الطول. "الإشارات" غير مستخدمة حاليًا.

باطل gv_init_sv (GV * gv ، HV * stash ، SV * namesv ،
أعلام U32)

gv_stashpv
إرجاع مؤشر إلى المخزن لحزمة محددة. يستخدم "strlen" ل
تحديد طول "الاسم" ، ثم استدعاء "gv_stashpvn ()".

HV * gv_stashpv (اسم حرف * * ، أعلام I32)

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

قد تكون الأعلام إحدى:

GV_ADD
SVf_UTF8
GV_NOADD_NOINIT
GV_NOINIT
GV_NOEXPAND
GV_ADDMG

أهمها على الأرجح GV_ADD و SVf_UTF8.

لاحظ ، استخدام "gv_stashsv" بدلاً من "gv_stashpvn" حيثما أمكن ذلك بقوة
موصى به لأسباب تتعلق بالأداء.

HV * gv_stashpvn (اسم حرف * اسم ، اسم U32 ،
أعلام I32)

gv_stashpvs
مثل "gv_stashpvn" ، لكنه يأخذ سلسلة حرفية بدلاً من زوج سلسلة / طول.

HV * gv_stashpvs (اسم الحرف * ، إنشاء I32)

gv_stashsv
إرجاع مؤشر إلى المخزن لحزمة محددة. راجع "gv_stashpvn".

لاحظ أن هذه الواجهة مفضلة بشدة على "gv_stashpvn" للأداء
الأسباب.

HV * gv_stashsv (أعلام SV * sv ، I32)

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

تعيين باطل (GV * gv)

في المتناول القيم


مؤشر Nullav Null AV.

(مهمل - استخدم "(AV *) NULL" بدلاً من ذلك)

مؤشر حرف Nullch Null. (لم يعد متاحًا عند تحديد "PERL_CORE".)

مؤشر Nullcv Null CV.

(مهمل - استخدم "(CV *) NULL" بدلاً من ذلك)

مؤشر Nullhv Null HV.

(مهمل - استخدم "(HV *) NULL" بدلاً من ذلك)

مؤشر Nullsv Null SV. (لم يعد متاحًا عند تحديد "PERL_CORE".)

مزيج تلاعب وظائف


يمثل هيكل HV تجزئة Perl. يتكون بشكل أساسي من مجموعة من المؤشرات ، كل منها
التي تشير إلى قائمة مرتبطة بهياكل التعليم العالي. يتم فهرسة المصفوفة بواسطة التجزئة
وظيفة المفتاح ، لذلك تمثل كل قائمة مرتبطة جميع إدخالات التجزئة التي لها نفس الشيء
قيمة التجزئة. يحتوي كل HE على مؤشر للقيمة الفعلية ، بالإضافة إلى مؤشر إلى HEK
الهيكل الذي يحمل المفتاح وقيمة التجزئة.

cop_fetch_label
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

إرجاع التسمية المرفقة بالشرطي. يمكن تعيين مؤشر الإشارات على "SVf_UTF8"
أو شنومكس.

const char * cop_fetch_label (COP * const شرطي ،
STRLEN * len ، U32 * أعلام)

cop_store_label
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

احفظ التسمية في "cop_hints_hash". تحتاج إلى تعيين العلامات على "SVf_UTF8" لملف
تسمية utf-8.

باطل cop_store_label (COP * شرطي ثابت ،
تسمية الحرف * ، STRLEN len ،
أعلام U32)

get_hv تُرجع قيمة HV لتجزئة Perl المحددة. يتم تمرير "الإشارات" إلى "gv_fetchpv".
إذا تم تعيين "GV_ADD" ولم يكن متغير Perl موجودًا ، فسيتم إنشاؤه.
إذا كانت قيمة "الإشارات" تساوي صفرًا وكان المتغير غير موجود ، فسيتم إرجاع NULL.

ملاحظة: تم إهمال شكل perl_ لهذه الوظيفة.

HV * get_hv (اسم const char * ، أعلام I32)

HEf_SVKEY
تحدد هذه العلامة ، المستخدمة في فتحة طول إدخالات التجزئة والهياكل السحرية
تحتوي البنية على مؤشر "SV *" حيث من المتوقع وجود مؤشر "char *".
(للعلم فقط - لا تستخدم).

HeHASH يعيد التجزئة المحسوبة المخزنة في إدخال التجزئة.

U32 HeHASH (HE * he)

يُرجع HeKEY المؤشر الفعلي المخزن في فتحة المفتاح لإدخال التجزئة. المؤشر
قد يكون "char *" أو "SV *" ، اعتمادًا على قيمة "HeKLEN ()". يمكن ان يكون
مخصص ل. يفضل استخدام وحدات الماكرو "HePV ()" أو "HeSVKEY ()"
إيجاد قيمة المفتاح.

باطل * HeKEY (HE * he)

HeKLEN إذا كان هذا سالبًا ، ويصل إلى "HEf_SVKEY" ، فإنه يشير إلى أن الإدخال يحتوي على
مفتاح "SV *". خلاف ذلك ، يحتفظ بالطول الفعلي للمفتاح. يمكن أن تسند إلى.
يُفضل عادة الماكرو "HePV ()" للعثور على أطوال المفاتيح.

سترلين هيكلن (هو * هو)

يُرجع HePV الفتحة الرئيسية لإدخال التجزئة كقيمة "char *" ، مع القيام بأي شيء ضروري
إلغاء مرجعية ربما مفاتيح "SV *". يتم وضع طول السلسلة في "len"
(هذا ماكرو ، لذا افعل ليس استخدام & لين). إذا كنت لا تهتم ما طوله
المفتاح هو أنه يمكنك استخدام المتغير العام "PL_na" ، على الرغم من أن هذا أقل من ذلك
كفاءة من استخدام متغير محلي. تذكر مع ذلك ، مفاتيح التجزئة هذه في بيرل
هي حرة في احتواء القيم الخالية المضمنة ، لذا فإن استخدام "strlen ()" أو ما شابه ذلك ليس جيدًا
طريقة للعثور على طول مفاتيح التجزئة. هذا مشابه جدًا لماكرو "SvPV ()"
الموضحة في مكان آخر في هذا المستند. انظر أيضا "HeUTF8".

إذا كنت تستخدم "HePV" للحصول على القيم لتمريرها إلى "newSVpvn ()" لإنشاء SV جديد ،
يجب أن تفكر في استخدام "newSVhek (HeKEY_hek (he))" لأنه أكثر كفاءة.

char * HePV (HE * he، STRLEN len)

يقوم HeSVKEY بإرجاع المفتاح كـ "SV *" أو "NULL" إذا كان إدخال التجزئة لا يحتوي على "SV *"
الرئيسية.

SV * HeSVKEY (HE * he)

HeSVKEY_force
إرجاع المفتاح كـ "SV *". سيتم إنشاء وإرجاع مؤقت لفاني "SV *" إذا
يحتوي إدخال التجزئة على مفتاح "char *" فقط.

SV * HeSVKEY_force (HE * he)

HeSVKEY_set
يضبط المفتاح على "SV *" ، مع الحرص على تعيين العلامات المناسبة على
يشير إلى وجود مفتاح "SV *" ، ويعيد نفس "SV *".

SV * HeSVKEY_set (HE * he، SV * sv)

يعرض HeUTF8 ما إذا كانت قيمة "char *" التي تم إرجاعها بواسطة "HePV" مشفرة في UTF-8 ، أم لا
أي مرجع ضروري لإمكانية استخدام مفاتيح "SV *". القيمة التي تم إرجاعها ستكون 0
أو غير 0 ، وليس بالضرورة 1 (أو حتى قيمة مع أي مجموعة بتات منخفضة) ، لذلك do ليس
قم بتعيين هذا بشكل أعمى إلى متغير "منطقي" ، حيث قد يكون "bool" نوعًا محرفًا لـ "char".

U32 HeUTF8 (HE * he)

HeVAL يُرجع فتحة القيمة (اكتب "SV *") المخزنة في إدخال التجزئة. يمكن أن تسند إلى.

SV * foo = HeVAL (hv) ؛
HeVAL (hv) = sv ؛

SV * HeVAL (HE * he)

HvENAME ترجع الاسم الفعال للمخبأ ، أو NULL إذا لم يكن هناك أي اسم. الفعال
يمثل الاسم موقعًا في جدول الرموز حيث يوجد هذا المخبأ. إنها
يتم تحديثها تلقائيًا عندما تكون الحزم مستعارة أو محذوفة. مخبأ لا
لم يعد في جدول الرموز له اسم فعال. يفضل هذا الاسم
"HvNAME" للاستخدام في MRO الخطية وذاكرة التخزين المؤقت.

char * HvENAME (HV * stash)

هفيناميلين
تُرجع طول الاسم الفعال للمخبأ.

STRLEN HvENAMELEN (HV * stash)

HvENNAMEUTF8
يعود صحيحًا إذا كان الاسم الفعال بترميز UTF8.

حرف غير موقّع HvENAMEUTF8 (HV * stash)

يُرجع HvNAME اسم الحزمة للمخفي ، أو NULL إذا لم يكن "stash" مخبأ. يرى
"SvSTASH" ، "CvSTASH".

char * HvNAME (HV * stash)

هفNAMELEN
ترجع طول اسم المخبأ.

STRLEN HvNAMELEN (HV * stash)

HvNAMEUTF8
يعود صحيحًا إذا كان الاسم بترميز UTF8.

حرف غير موقّع HvNAMEUTF8 (HV * stash)

hv_assert
تحقق من أن التجزئة في حالة متسقة داخليًا.

hv_assert باطل (HV * hv)

hv_clear
يحرر جميع عناصر التجزئة ، ويتركها فارغة. ما يعادل XS
"٪ التجزئة = ()". راجع أيضًا "hv_undef".

راجع "av_clear" للحصول على ملاحظة حول احتمال كون التجزئة غير صالحة عند الإرجاع.

باطل hv_clear (HV * hv)

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

باطل hv_clear_placeholders (HV * hv)

hv_copy_hints_hv
نسخة متخصصة من "newHVhv" لنسخ "٪ ^ H". وهف يجب أن يكون مؤشرًا إلى
التجزئة (التي قد تحتوي على "٪ ^ H" سحرية ، ولكن يجب أن تكون غير سحرية بشكل عام) ، أو "NULL"
(يتم تفسيره على أنه تجزئة فارغة). المحتوى من وهف يتم نسخها إلى تجزئة جديدة ، والتي
تمت إضافة السحر الخاص بـ "٪ ^ H" إليه. يتم إرجاع مؤشر إلى التجزئة الجديدة.

HV * hv_copy_hints_hv (HV * ohv)

hv_delete
يحذف زوج المفتاح / القيمة في التجزئة. تتم إزالة SV للقيمة من التجزئة ،
جعلها مميتة ، وعادت إلى المتصل. القيمة المطلقة لـ "klen" هي
طول المفتاح. إذا كانت قيمة "klen" سلبية ، فمن المفترض أن يكون المفتاح في الداخل
Unicode بترميز UTF-8. عادةً ما تكون قيمة "الإشارات" صفرًا ؛ إذا تم التعيين على
سيتم إرجاع G_DISCARD ثم NULL. سيتم أيضًا إرجاع NULL إذا كان المفتاح هو
لم يتم العثور على.

SV * hv_delete (HV * hv ، const char * key ، I32 klen ،
أعلام I32)

hv_delete_ent
يحذف زوج المفتاح / القيمة في التجزئة. تتم إزالة القيمة SV من التجزئة ، المصنوعة
بشري ، وعاد إلى المتصل. عادةً ما تكون قيمة "الإشارات" صفرًا ؛ لو
مضبوطة على G_DISCARD ثم سيتم إرجاع NULL. سيتم أيضًا إرجاع NULL إذا كان
المفتاح غير موجود. يمكن أن تكون "التجزئة" قيمة تجزئة مسبقة الحساب صالحة ، أو 0 لطلبها
ليتم حسابها.

SV * hv_delete_ent (HV * hv ، SV * keysv ، أعلام I32 ،
تجزئة U32)

hv_exists
إرجاع قيمة منطقية تشير إلى وجود مفتاح التجزئة المحدد. المطلق
قيمة "klen" هي طول المفتاح. إذا كانت كلمة "klen" سلبية فإن المفتاح يكون
يفترض أن يكون بترميز UTF-8 بترميز Unicode.

bool hv_exists (HV * hv ، const char * key ، I32 klen)

hv_exists_ent
إرجاع قيمة منطقية تشير إلى وجود مفتاح التجزئة المحدد. يمكن أن تكون "التجزئة"
قيمة تجزئة محسوبة مسبقًا صالحة ، أو 0 للمطالبة بحسابها.

bool hv_exists_ent (HV * hv ، SV * keysv ، تجزئة U32)

hv_fetch
إرجاع SV الذي يتوافق مع المفتاح المحدد في التجزئة. المطلق
قيمة "klen" هي طول المفتاح. إذا كانت كلمة "klen" سلبية فإن المفتاح يكون
يفترض أن يكون بترميز UTF-8 بترميز Unicode. إذا تم تعيين "lval" فسيتم الجلب
جزء من متجر. هذا يعني أنه في حالة عدم وجود قيمة في التجزئة المرتبطة بـ
المفتاح المحدد ، ثم يتم إنشاء واحد ويتم إرجاع المؤشر إليه. "SV *" عليه
يمكن تخصيص النقاط إليها. لكن تحقق دائمًا من أن القيمة المعادة غير خالية
قبل إلغاء الإشارة إليه إلى "SV *".

لمزيد من المعلومات ، راجع "فهم سحر التجزئة والمصفوفات المربوطة" في perlguts
معلومات حول كيفية استخدام هذه الوظيفة في تجزئات مرتبطة.

SV ** hv_fetch (HV * hv ، const char * key ، I32 klen ،
I32 لفال)

hv_fetchs
مثل "hv_fetch" ، لكنه يأخذ سلسلة حرفية بدلاً من سلسلة / زوج طول.

SV ** hv_fetchs (HV * tb، const char * key، I32 lval)

hv_fetch_ent
إرجاع إدخال التجزئة الذي يتوافق مع المفتاح المحدد في التجزئة. "تجزئة"
يجب أن يكون رقم تجزئة محسوب مسبقًا صالحًا لـ "المفتاح" المحدد ، أو 0 إذا كنت تريد
وظيفة لحسابه. إذا تم تعيين "lval" ، فسيكون الجلب جزءًا من المتجر.
تأكد من أن القيمة المرجعة ليست خالية قبل الوصول إليها. القيمة المعادة عندما
"hv" عبارة عن تجزئة مرتبطة هي مؤشر إلى موقع ثابت ، لذا تأكد من عمل نسخة
من الهيكل إذا كنت بحاجة إلى تخزينه في مكان ما.

لمزيد من المعلومات ، راجع "فهم سحر التجزئة والمصفوفات المربوطة" في perlguts
معلومات حول كيفية استخدام هذه الوظيفة في تجزئات مرتبطة.

HE * hv_fetch_ent (HV * hv ، SV * keysv ، I32 lval ،
تجزئة U32)

تُرجع hv_fill عدد مجموعات التجزئة التي تكون قيد الاستخدام. هذه الوظيفة
ملفوفة بواسطة الماكرو "HvFILL".

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

STRLEN hv_fill (HV * const hv)

hv_iterinit
تعد نقطة بداية لاجتياز جدول التجزئة. تُرجع عدد المفاتيح بتنسيق
التجزئة (مثل "HvUSEDKEYS (hv)"). القيمة المعادة حاليا فقط
ذات مغزى للتجزئة بدون سحر التعادل.

ملاحظة: قبل الإصدار 5.004_65 ، تم استخدام "hv_iterinit" لإرجاع رقم التجزئة
الدلاء التي يتم استخدامها. إذا كنت لا تزال بحاجة إلى هذه القيمة الباطنية ، فيمكنك ذلك
احصل عليه من خلال الماكرو "HvFILL (hv)".

I32 hv_iterinit (HV * hv)

hv_iterkey
إرجاع المفتاح من الموضع الحالي لمكرر التجزئة. يرى
"hv_iterinit".

char * hv_iterkey (HE * entry، I32 * retlen)

hv_iterkeysv
إرجاع المفتاح كـ "SV *" من الموضع الحالي لمكرر التجزئة. ال
ستكون القيمة المعادة دائمًا نسخة مميتة من المفتاح. راجع أيضًا "hv_iterinit".

SV * hv_iterkeysv (HE * دخول)

hv_iternext
إرجاع الإدخالات من مكرر التجزئة. انظر "hv_iterinit".

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

HE * hv_iternext (HV * hv)

hv_iternextsv
ينفذ "hv_iternext" و "hv_iterkey" و "hv_iterval" في عملية واحدة.

SV * hv_iternextsv (HV * hv ، char ** key ، I32 * retlen)

hv_iternext_flags
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

إرجاع الإدخالات من مكرر التجزئة. راجع "hv_iterinit" و "hv_iternext". ال
عادةً ما تكون قيمة "الإشارات" صفرًا ؛ إذا تم تعيين HV_ITERNEXT_WANTPLACEHOLDERS على
سيتم إرجاع مفاتيح العناصر النائبة (للتجزئة المقيدة) بالإضافة إلى وضعها الطبيعي
مفاتيح. بشكل افتراضي يتم تخطي العناصر النائبة تلقائيًا. حاليا
يتم تنفيذ العنصر النائب بقيمة & PL_sv_placeholder. نلاحظ أن
قد يتغير تنفيذ العناصر النائبة والتجزئة المقيدة ، و
التنفيذ حاليًا غير مستخلص بشكل كافٍ حتى يكون أي تغيير مرتبًا.

HE * hv_iternext_flags (HV * hv ، I32 flags)

hv_iterval
تُرجع القيمة من الموضع الحالي لمكرر التجزئة. يرى
"hv_iterkey".

SV * hv_iterval (HV * hv ، HE * entry)

hv_magic
يضيف سحرًا إلى التجزئة. انظر "sv_magic".

باطل hv_magic (HV * hv، GV * gv، int how)

hv_scalar
يقيّم التجزئة في سياق عددي ويعيد النتيجة. يتعامل مع السحر عندما
التجزئة مرتبطة.

SV * hv_scalar (HV * hv)

hv_store
يخزن SV في تجزئة. يتم تحديد مفتاح التجزئة على أنه "مفتاح" والقيمة المطلقة
من "klen" هو طول المفتاح. إذا كانت قيمة "klen" سلبية ، فمن المفترض أن يكون المفتاح
تكون بترميز UTF-8 بترميز Unicode. معلمة "التجزئة" هي قيمة التجزئة المحسوبة مسبقًا ؛
إذا كانت صفرًا ، فستحسبها Perl.

ستكون القيمة المرجعة خالية إذا فشلت العملية أو إذا لم تكن هناك حاجة إلى القيمة
ليتم تخزينها فعليًا داخل التجزئة (كما في حالة التجزئة المربوطة). خلاف ذلك
يمكن إلغاء الإشارة إليه للحصول على "SV *" الأصلي. لاحظ أن المتصل
مسؤول عن الزيادة المناسبة في العدد المرجعي لـ "val" قبل
استدعاء ، وإنقاصها إذا أعادت الدالة NULL. بشكل فعال ناجح
يأخذ hv_store ملكية مرجع واحد إلى "val". هذا هو عادة ما أنت
يريد؛ يحتوي SV الذي تم إنشاؤه حديثًا على عدد مرجعي واحد ، لذلك إذا كان كل التعليمات البرمجية الخاصة بك
قم بإنشاء SVs ثم قم بتخزينها في تجزئة ، وستمتلك hv_store المرجع الوحيد لملف
SV جديد ، ولا يحتاج الرمز الخاص بك إلى فعل أي شيء آخر للتنظيم. hv_store هو
لم يتم تنفيذه كاستدعاء hv_store_ent ، ولا يُنشئ SV مؤقتًا لـ
المفتاح ، لذلك إذا لم تكن بياناتك الرئيسية في نموذج SV بالفعل ، فاستخدم hv_store في
تفضيل hv_store_ent.

لمزيد من المعلومات ، راجع "فهم سحر التجزئة والمصفوفات المربوطة" في perlguts
معلومات حول كيفية استخدام هذه الوظيفة في تجزئات مرتبطة.

SV ** hv_store (HV * hv ، مفتاح const char * ، I32 klen ،
SV * val ، تجزئة U32)

hv_stores
مثل "hv_store" ، لكنه يأخذ سلسلة حرفية بدلاً من زوج سلسلة / طول و
يحذف معلمة التجزئة.

SV ** hv_stores (HV * tb، const char * key،
NULLOK SV * val)

hv_store_ent
مخازن "فال" في تجزئة. يتم تحديد مفتاح التجزئة على أنه "مفتاح". معلمة "التجزئة"
هي قيمة التجزئة المحسوبة مسبقًا ؛ إذا كانت صفرًا ، فستحسبها Perl. ال
القيمة المعادة هي إدخال التجزئة الجديد الذي تم إنشاؤه على هذا النحو. ستكون فارغة إذا كانت العملية
فشل أو إذا لم تكن القيمة بحاجة إلى تخزينها فعليًا داخل التجزئة (كما في
حالة التجزئة المربوطة). خلاف ذلك يمكن أن تكون محتويات القيمة المرجعة
الوصول إليها باستخدام "هو؟" وحدات الماكرو الموصوفة هنا. لاحظ أن المتصل
مسؤول عن الزيادة المناسبة في العدد المرجعي لـ "val" قبل
استدعاء ، وإنقاصها إذا أعادت الدالة NULL. بشكل فعال ناجح
hv_store_ent يأخذ ملكية مرجع واحد إلى "val". هذا هو عادة ما أنت
يريد؛ يحتوي SV الذي تم إنشاؤه حديثًا على عدد مرجعي واحد ، لذلك إذا كان كل التعليمات البرمجية الخاصة بك
قم بإنشاء SVs ثم قم بتخزينها في تجزئة ، وستمتلك hv_store المرجع الوحيد لملف
SV جديد ، ولا يحتاج الرمز الخاص بك إلى فعل أي شيء آخر للتنظيم. لاحظ أن
hv_store_ent يقرأ فقط "المفتاح" ؛ على عكس "val" ، فهي لا تأخذ ملكيتها ،
لذا فإن الحفاظ على عدد المرجع الصحيح على "المفتاح" هو بالكامل للمتصل
مسؤولية. لم يتم تنفيذ hv_store كاستدعاء إلى hv_store_ent ، وهو كذلك
لا تنشئ SV مؤقتًا للمفتاح ، لذلك إذا لم تكن بياناتك الرئيسية موجودة بالفعل في SV
النموذج ثم استخدم hv_store في الأفضلية على hv_store_ent.

لمزيد من المعلومات ، راجع "فهم سحر التجزئة والمصفوفات المربوطة" في perlguts
معلومات حول كيفية استخدام هذه الوظيفة في تجزئات مرتبطة.

HE * hv_store_ent (HV * hv ، SV * key ، SV * val ، U32 hash)

hv_undef
غير تعريف التجزئة. XS المكافئ لـ "undef (٪ hash)".

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

راجع "av_clear" للحصول على ملاحظة حول احتمال كون التجزئة غير صالحة عند الإرجاع.

باطل hv_undef (HV * hv)

newHV ينشئ HV جديدًا. تم تعيين عدد المرجع على 1.

HV * newHV ()

صنارة صيد تلاعب


توفر هذه الوظائف وسائل مريحة وآمنة للتعامل مع متغيرات الخطاف.

اللف_وب_المدقق
يضع دالة C في سلسلة وظائف الفحص لنوع المرجع المحدد. هذا
هي الطريقة المفضلة لمعالجة صفيف "PL_check". شفرة التشغيل يحدد أي
نوع المرجع هو أن يتأثر. المدقق الجديد هو مؤشر لوظيفة C وهذا هو
ليتم إضافتها إلى سلسلة التحقق الخاصة برمز التشغيل ، و old_checker_p يشير إلى التخزين
الموقع حيث سيتم تخزين مؤشر الوظيفة التالية في السلسلة. ال
قيمة new_pointer هو مكتوب في مجموعة "PL_check" ، بينما القيمة
سبق تخزينها هناك مكتوب ل * old_checker_p.

يجب تحديد الوظيفة على النحو التالي:

ثابت OP * new_checker (pTHX_ OP * op) {...}

من المفترض أن يتم استدعاؤها على هذا النحو:

new_checker (aTHX_ op)

old_checker_p يجب تعريفه على النحو التالي:

ثابت Perl_check_t old_checker_p ؛

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

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

إذا كنت تريد التأثير على تجميع المكالمات إلى روتين فرعي معين ، فاستخدم
"cv_set_call_checker" بدلاً من ربط فحص جميع عمليات "entersub".

باطل wrap_op_checker (Optype opcode،
Perl_check_t new_checker ،
Perl_check_t * old_checker_p)

Lexer الواجهة


هذه هي الطبقة السفلية من المحلل اللغوي لـ Perl ، والتي تدير الأحرف والرموز المميزة.

lex_bufutf8
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يشير إلى ما إذا كان يجب أن تكون الثمانيات في المخزن المؤقت lexer ("PL_parser-> linestr")
يتم تفسيره على أنه ترميز UTF-8 لأحرف Unicode. إذا لم يكن كذلك، ينبغي أن تكون
تفسر على أنها أحرف لاتينية -1. هذا مشابه لعلامة "SvUTF8" لـ
عددي.

في وضع UTF-8 ، ليس مضمونًا أن يحتوي المخزن المؤقت lexer بالفعل على صالح
UTF-8. يجب أن يكون كود البرمجة قويًا في مواجهة الترميز غير الصحيح.

تعتبر علامة "SvUTF8" الفعلية للعداد القياسي "PL_parser-> linestr" مهمة ، ولكن
ليست القصة الكاملة فيما يتعلق بترميز أحرف الإدخال. عادة ، عندما يكون ملف
قيد القراءة ، ويحتوي العدد القياسي على ثماني بتات وإيقاف تشغيل علامة "SvUTF8" الخاصة به ، ولكن
يجب تفسير الثماني بتات على أنها UTF-8 إذا كان "استخدام utf8" pragma ساريًا.
أثناء سلسلة Eval ، ومع ذلك ، قد يكون الحجمي علامة "SvUTF8" قيد التشغيل وفي
في هذه الحالة ، يجب تفسير الثماني بتات على أنها UTF-8 ما لم يكن pragma "استخدام بايت"
ساري المفعول. قد يتغير هذا المنطق في المستقبل. استخدم هذه الوظيفة بدلاً من
تنفيذ المنطق بنفسك.

bool lex_bufutf8 ()

lex_discard_to
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يتجاهل الجزء الأول من المخزن المؤقت "PL_parser-> linestr" ، حتى PTR.
سيتم نقل المحتوى المتبقي من المخزن المؤقت ، وسيتم نقل كافة المؤشرات إلى المخزن المؤقت
تحديثها بشكل مناسب. PTR يجب ألا يكون في وقت لاحق في المخزن المؤقت من موضع
"PL_parser-> bufptr": لا يُسمح بتجاهل النص الذي لم يتم ترجمته بعد.

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

lex_discard_to باطل (char * ptr)

lex_grow_linestr
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يعيد تخصيص المخزن المؤقت lexer ("PL_parser-> linestr") لاستيعاب ما لا يقل عن ليون
ثماني بتات (بما في ذلك إنهاء "NUL"). إرجاع المؤشر إلى المعاد تخصيصه
متعادل. يعد ذلك ضروريًا قبل إجراء أي تعديل مباشر للمخزن المؤقت
من شأنه أن يزيد من طوله. يوفر "lex_stuff_pvn" طريقة أكثر ملاءمة لـ
أدخل النص في المخزن المؤقت.

لا تستخدم "SvGROW" أو "sv_grow" مباشرة على "PL_parser-> linestr" ؛ هذه الوظيفة
يقوم بتحديث جميع متغيرات lexer التي تشير مباشرة إلى المخزن المؤقت.

char * lex_grow_linestr (STRLEN len)

lex_next_chunk
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يقرأ في الجزء التالي من النص المراد ترجمته ، مع إلحاقه بـ "PL_parser-> linestr".
يجب استدعاء هذا عندما ينظر رمز lexing إلى نهاية المقطع الحالي
ويريد معرفة المزيد. من المعتاد ، ولكن ليس من الضروري ، أن يكون لديك lexing
تستهلك كامل الجزء الحالي في هذا الوقت.

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

إرجاع صحيح إذا تمت إضافة نص جديد إلى المخزن المؤقت ، أو إرجاع خطأ إذا تم إضافة نص جديد إلى المخزن المؤقت
وصلت إلى نهاية نص الإدخال.

bool lex_next_chunk (أعلام U32)

lex_peek_unichar
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يتطلع إلى الأمام حرف واحد (Unicode) في النص الذي يتم تجميعه حاليًا. عائدات
نقطة الشفرة (قيمة عدد صحيح بدون إشارة) للحرف التالي ، أو -1 إذا كان lexing يحتوي على
وصلت إلى نهاية نص الإدخال. لاستهلاك الشخصية الخاطفة ، استخدم
"lex_read_unichar".

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

إذا تم تفسير الإدخال على أنه UTF-8 وكان خطأ ترميز UTF-8 هو
مصادفة ، تم إنشاء استثناء.

I32 lex_peek_unichar (أعلام U32)

lex_read_space
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يقرأ المساحات الاختيارية ، بأسلوب Perl ، في النص الذي يتم ترجمته حاليًا. ال
قد تشتمل المسافات على أحرف مسافات بيضاء عادية وتعليقات بأسلوب Perl.
تتم معالجة توجيهات "#line" إذا تمت مواجهتها. تم نقل "PL_parser-> bufptr"
بعد المسافات ، بحيث يشير إلى حرف غير مسافة (أو نهاية
أدخل نصآ).

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

lex_read_space باطل (أعلام U32)

lex_read_to
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

استهلك نصًا في المخزن المؤقت lexer ، من "PL_parser-> bufptr" حتى PTR. هذا
تقدم "PL_parser-> bufptr" لتتناسب PTR، وأداء مسك الدفاتر الصحيح
كلما تم تمرير حرف سطر جديد. هذه هي الطريقة العادية لتناول lexed
نص.

يمكن استخلاص تفسير ثماني بتات المخزن المؤقت باستخدام القليل
وظائف ذات مستوى أعلى "lex_peek_unichar" و "lex_read_unichar".

lex_read_to باطل (char * ptr)

lex_read_unichar
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يقرأ الحرف التالي (Unicode) في النص الجاري ترجمته حاليًا. ترجع ال
رمز نقطة (قيمة عدد صحيح بدون إشارة) للقراءة والتحرك
"PL_parser-> bufptr" بعد الحرف أو إرجاع -1 إذا وصل lexing إلى
نهاية نص الإدخال. لفحص الحرف التالي بشكل غير إتلافي ، استخدم
"lex_peek_unichar" بدلاً من ذلك.

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

إذا تم تفسير الإدخال على أنه UTF-8 وكان خطأ ترميز UTF-8 هو
مصادفة ، تم إنشاء استثناء.

I32 lex_read_unichar (أعلام U32)

lex_start
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يقوم بإنشاء وتهيئة كائن حالة lexer / parser جديد ، مع توفير سياق بتنسيق
والتي يتم تحليلها من مصدر جديد لشفرة Perl. مؤشر إلى الدولة الجديدة
يتم وضع الكائن في "PL_parser". يتم إجراء إدخال على كومة الحفظ بحيث يتم ذلك
فك كائن الحالة الجديد سيتم إتلافه والقيمة السابقة لـ
ستتم استعادة "PL_parser". لا حاجة لفعل أي شيء آخر لتنظيف الإعراب
سياق الكلام.

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

تشير الأعلام المعلمة محجوزة للاستخدام في المستقبل. حاليا يتم استخدامه فقط من قبل بيرل
داخليًا ، لذلك يجب أن تتجاوز الامتدادات الصفر دائمًا.

lex_start باطل (خط SV * ، PerlIO * rsfp ، أعلام U32)

lex_stuff_pv
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

أدخل الأحرف في المخزن المؤقت lexer ("PL_parser-> linestr") ، مباشرة بعد ذلك
نقطة lexing الحالية ("PL_parser-> bufptr") ، إعادة تخصيص المخزن المؤقت إذا
ضروري. هذا يعني أن رمز lexing الذي يتم تشغيله لاحقًا سيشاهد الأحرف على أنها
إذا كانوا قد ظهروا في الإدخال. لا ينصح بعمل هذا كجزء من
الاعراب العادي ، ومعظم استخدامات هذا المرفق تتعرض لخطر الإدخال
يتم تفسير الأحرف بطريقة غير مقصودة.

يتم تمثيل السلسلة المراد إدراجها بواسطة ثماني بتات تبدأ من pv وتستمر
إلى أول نول. يتم تفسير هذه الثمانيات على أنها إما UTF-8 أو Latin-1 ،
وفقًا لما إذا تم تعيين علامة "LEX_STUFF_UTF8" الأعلام. الشخصيات
يتم إعادة ترميزها لمخزن lexer ، وفقًا لكيفية عمل المخزن المؤقت حاليًا
مفسرة ("lex_bufutf8"). إذا لم يكن من الملائم إلغاء إنهاء السلسلة النصية لـ
عند إدراجها ، تكون الوظيفة "lex_stuff_pvn" أكثر ملاءمة.

lex_stuff_pv باطل (حرف const char * pv ، أعلام U32)

lex_stuff_pvn
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

أدخل الأحرف في المخزن المؤقت lexer ("PL_parser-> linestr") ، مباشرة بعد ذلك
نقطة lexing الحالية ("PL_parser-> bufptr") ، إعادة تخصيص المخزن المؤقت إذا
ضروري. هذا يعني أن رمز lexing الذي يتم تشغيله لاحقًا سيشاهد الأحرف على أنها
إذا كانوا قد ظهروا في الإدخال. لا ينصح بعمل هذا كجزء من
الاعراب العادي ، ومعظم استخدامات هذا المرفق تتعرض لخطر الإدخال
يتم تفسير الأحرف بطريقة غير مقصودة.

يتم تمثيل السلسلة المراد إدراجها بواسطة ليون ثماني بتات بدءًا من pv. هؤلاء
يتم تفسير الثماني بتات على أنها إما UTF-8 أو Latin-1 ، وفقًا لما إذا كان
تم تعيين علامة "LEX_STUFF_UTF8" الأعلام. يتم إعادة ترميز الأحرف لـ lexer
المخزن المؤقت ، وفقًا لكيفية تفسير المخزن المؤقت حاليًا
("lex_bufutf8"). إذا كانت السلسلة المراد إدخالها متاحة على هيئة عددية Perl ، فسيتم
وظيفة "lex_stuff_sv" أكثر ملاءمة.

void lex_stuff_pvn (const char * pv ، STRLEN len ،
أعلام U32)

lex_stuff_pvs
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مثل "lex_stuff_pvn" ، لكنه يأخذ سلسلة حرفية بدلاً من زوج سلسلة / طول.

lex_stuff_pvs باطل (حرف const char * pv ، أعلام U32)

lex_stuff_sv
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

أدخل الأحرف في المخزن المؤقت lexer ("PL_parser-> linestr") ، مباشرة بعد ذلك
نقطة lexing الحالية ("PL_parser-> bufptr") ، إعادة تخصيص المخزن المؤقت إذا
ضروري. هذا يعني أن رمز lexing الذي يتم تشغيله لاحقًا سيشاهد الأحرف على أنها
إذا كانوا قد ظهروا في الإدخال. لا ينصح بعمل هذا كجزء من
الاعراب العادي ، ومعظم استخدامات هذا المرفق تتعرض لخطر الإدخال
يتم تفسير الأحرف بطريقة غير مقصودة.

السلسلة المراد إدراجها هي قيمة السلسلة sv. يتم إعادة ترميز الأحرف
بالنسبة إلى المخزن المؤقت lexer ، وفقًا لكيفية تفسير المخزن المؤقت حاليًا
("lex_bufutf8"). إذا لم تكن السلسلة المراد إدخالها عبارة عن عدد قياسي من لغة Perl ، فسيتم
تتجنب وظيفة "lex_stuff_pvn" الحاجة إلى إنشاء عدد قياسي.

lex_stuff_sv باطل (أعلام SV * sv ، U32)

lex_unstuff
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

تجاهل النص الذي على وشك أن يكون lexed ، من "PL_parser-> bufptr" حتى PTR. نص
متابعيك PTR سيتم نقلها ، وتقصير المخزن المؤقت. هذا يخفي المهملة
نص من أي كود lexing يتم تشغيله لاحقًا ، كما لو أن النص لم يظهر أبدًا.

هذه ليست الطريقة المعتادة لاستهلاك النص المعجم. لذلك ، استخدم "lex_read_to".

lex_unstuff باطل (char * ptr)

parse_arithexpr
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

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

يتم إرجاع شجرة المرجع التي تمثل التعبير. إذا كان التعبير الاختياري هو
غائب ، يتم إرجاع مؤشر فارغ ، وإلا فإن المؤشر سيكون غير فارغ.

إذا حدث خطأ في التحليل أو التجميع ، في معظم الحالات تكون شجرة المرجع الصالحة
عاد على أي حال. ينعكس الخطأ في حالة المحلل اللغوي ، وينتج عادةً
في استثناء واحد في المستوى الأعلى للتحليل والذي يغطي كل التجميع
الأخطاء التي حدثت. ومع ذلك ، فإن بعض أخطاء الترجمة ستؤدي إلى استثناء
على الفور.

OP * parse_arithexpr (أعلام U32)

parse_barestmt
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

حلل عبارة Perl واحدة غير مزخرفة. قد يكون هذا أمرًا طبيعيًا
بيان أو تصريح له تأثير وقت التجميع. لا يشمل أي
التسمية أو الملصق الآخر. الأمر متروك للمتصل للتأكد من أن الديناميكية
تم تعيين حالة المحلل اللغوي ("PL_parser" وآخرون) بشكل صحيح لتعكس مصدر ملف
الكود المراد تحليله والسياق المعجمي للبيان.

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

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

تشير الأعلام المعلمة محجوزة للاستخدام في المستقبل ، ويجب أن تكون دائمًا صفرًا.

OP * parse_barestmt (أعلام U32)

parse_block
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

تحليل كتلة واحدة كاملة من تعليمات Perl البرمجية. هذا يتكون من قوس الافتتاح ، أ
تسلسل البيانات ، وقوس إغلاق. تشكل الكتلة المعجمية
النطاق ، لذلك يمكن احتواء المتغيرات "الخاصة بي" وتأثيرات وقت الترجمة المختلفة
هو - هي. الأمر متروك للمتصل للتأكد من أن حالة المحلل اللغوي الديناميكي ("PL_parser"
et al) بشكل صحيح لتعكس مصدر الكود المراد تحليله و
السياق المعجمي للبيان.

يتم إرجاع شجرة المرجع التي تمثل كتلة التعليمات البرمجية. هذه دائما عملية حقيقية ،
أبدا مؤشر فارغ. ستكون عادةً قائمة "lineseq" ، بما في ذلك "nextstate"
أو ما يعادله من العمليات. لا يتم تضمين أي عمليات لإنشاء أي نوع من نطاق وقت التشغيل بواسطة
بفضل كونها كتلة.

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

تشير الأعلام المعلمة محجوزة للاستخدام في المستقبل ، ويجب أن تكون دائمًا صفرًا.

OP * parse_block (أعلام U32)

parse_fullexpr
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

تحليل تعبير Perl واحد كامل. هذا يسمح لقواعد التعبير الكامل ،
بما في ذلك العوامل ذات الأولوية الأقل مثل "أو". يجب أن يكون التعبير
متبوعًا (وبالتالي تم إنهاؤه) برمز يكون التعبير عادةً
تم إنهاؤه بواسطة: نهاية الملف ، أو علامة ترقيم بين قوسين ، أو فاصلة منقوطة ، أو أحد
الكلمات الرئيسية التي تشير إلى معدِّل تعبير-بيان postfix. لو الأعلام
يتضمن "PARSE_OPTIONAL" ثم يكون التعبير اختياريًا ، وإلا فهو كذلك
إلزامي. الأمر متروك للمتصل للتأكد من حالة المحلل اللغوي الديناميكي
("PL_parser" وآخرون) تم ضبطه بشكل صحيح ليعكس مصدر الكود المطلوب
معرب والسياق المعجمي للتعبير.

يتم إرجاع شجرة المرجع التي تمثل التعبير. إذا كان التعبير الاختياري هو
غائب ، يتم إرجاع مؤشر فارغ ، وإلا فإن المؤشر سيكون غير فارغ.

إذا حدث خطأ في التحليل أو التجميع ، في معظم الحالات تكون شجرة المرجع الصالحة
عاد على أي حال. ينعكس الخطأ في حالة المحلل اللغوي ، وينتج عادةً
في استثناء واحد في المستوى الأعلى للتحليل والذي يغطي كل التجميع
الأخطاء التي حدثت. ومع ذلك ، فإن بعض أخطاء الترجمة ستؤدي إلى استثناء
على الفور.

OP * parse_fullexpr (أعلام U32)

parse_fullstmt
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

تحليل جملة Perl واحدة كاملة. قد يكون هذا بيان أمر طبيعي
أو تصريح له تأثير وقت التجميع ، وقد يتضمن تسميات اختيارية.
الأمر متروك للمتصل للتأكد من أن حالة المحلل اللغوي الديناميكي ("PL_parser" وآخرون)
تم ضبطه بشكل صحيح ليعكس مصدر الكود المراد تحليله والمعجم
سياق البيان.

يتم إرجاع شجرة المرجع التي تمثل البيان. قد يكون هذا مؤشرًا فارغًا إذا
البيان فارغ ، على سبيل المثال إذا كان بالفعل تعريف روتين فرعي
(التي لها آثار جانبية وقت التجميع). إذا لم يكن فارغًا ، فسيكون نتيجة أ
استدعاء "newSTATEOP" ، بما في ذلك عادةً "nextstate" أو ما يعادله.

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

تشير الأعلام المعلمة محجوزة للاستخدام في المستقبل ، ويجب أن تكون دائمًا صفرًا.

OP * parse_fullstmt (أعلام U32)

parse_label
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

حلل تسمية واحدة ، ربما تكون اختيارية ، من النوع الذي قد يسبق Perl
إفادة. الأمر متروك للمتصل للتأكد من حالة المحلل اللغوي الديناميكي
("PL_parser" وآخرون) تم ضبطه بشكل صحيح ليعكس مصدر الكود المطلوب
معرب. لو الأعلام يتضمن "PARSE_OPTIONAL" ثم يكون التصنيف اختياريًا ، وإلا
وهو إلزامي.

يتم إرجاع اسم التسمية في شكل عددي جديد. إذا كان اختياريًا
التسمية غير موجودة ، يتم إرجاع مؤشر فارغ.

إذا حدث خطأ في التحليل ، والذي يمكن أن يحدث فقط إذا كانت التسمية إلزامية ، أ
يتم إرجاع التسمية الصالحة على أي حال. ينعكس الخطأ في حالة المحلل اللغوي ،
يؤدي عادةً إلى استثناء واحد في المستوى الأعلى من التحليل الذي يغطي
كل أخطاء الترجمة التي حدثت.

SV * parse_label (أعلام U32)

parse_listexpr
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

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

يتم إرجاع شجرة المرجع التي تمثل التعبير. إذا كان التعبير الاختياري هو
غائب ، يتم إرجاع مؤشر فارغ ، وإلا فإن المؤشر سيكون غير فارغ.

إذا حدث خطأ في التحليل أو التجميع ، في معظم الحالات تكون شجرة المرجع الصالحة
عاد على أي حال. ينعكس الخطأ في حالة المحلل اللغوي ، وينتج عادةً
في استثناء واحد في المستوى الأعلى للتحليل والذي يغطي كل التجميع
الأخطاء التي حدثت. ومع ذلك ، فإن بعض أخطاء الترجمة ستؤدي إلى استثناء
على الفور.

OP * parse_listexpr (أعلام U32)

parse_stmtseq
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

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

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

إذا حدث خطأ في التحليل أو التجميع ، في معظم الحالات تكون شجرة المرجع الصالحة
عاد على أي حال. ينعكس الخطأ في حالة المحلل اللغوي ، وينتج عادةً
في استثناء واحد في المستوى الأعلى للتحليل والذي يغطي كل التجميع
الأخطاء التي حدثت. ومع ذلك ، فإن بعض أخطاء الترجمة ستؤدي إلى استثناء
على الفور.

تشير الأعلام المعلمة محجوزة للاستخدام في المستقبل ، ويجب أن تكون دائمًا صفرًا.

OP * parse_stmtseq (أعلام U32)

parse_termexpr
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

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

يتم إرجاع شجرة المرجع التي تمثل التعبير. إذا كان التعبير الاختياري هو
غائب ، يتم إرجاع مؤشر فارغ ، وإلا فإن المؤشر سيكون غير فارغ.

إذا حدث خطأ في التحليل أو التجميع ، في معظم الحالات تكون شجرة المرجع الصالحة
عاد على أي حال. ينعكس الخطأ في حالة المحلل اللغوي ، وينتج عادةً
في استثناء واحد في المستوى الأعلى للتحليل والذي يغطي كل التجميع
الأخطاء التي حدثت. ومع ذلك ، فإن بعض أخطاء الترجمة ستؤدي إلى استثناء
على الفور.

OP * parse_termexpr (أعلام U32)

PL_parser
مؤشر إلى هيكل يتضمن حالة عملية التحليل حاليًا
في تَقَدم. يمكن تغيير المؤشر محليًا لإجراء تحليل متداخل بدون
التدخل في حالة التحليل الخارجي. أعضاء فرديين في "PL_parser"
لديهم وثائقهم الخاصة.

PL_parser-> bufend
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مؤشر مباشر إلى نهاية جزء النص الذي يتم تجميعه حاليًا ، نهاية
المخزن المؤقت lexer. هذا يساوي "SvPVX (PL_parser-> linestr) +
SvCUR (PL_parser-> linestr) ". يوجد دائمًا حرف" NUL "(صفر ثماني بتات) في
نهاية المخزن المؤقت ، ولا تعد جزءًا من محتويات المخزن المؤقت.

PL_parser-> bufptr
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يشير إلى الوضع الحالي من lexing داخل المخزن المؤقت lexer. الشخصيات
حول هذه النقطة يمكن فحصها بحرية ، ضمن النطاق المحدد بـ
"SvPVX (" PL_parser-> linestr ")" و "PL_parser-> bufend". الثمانيات من المخزن المؤقت
يمكن تفسيره على أنه إما UTF-8 أو Latin-1 ، كما هو موضح بواسطة
"lex_bufutf8".

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

يمكن استخلاص تفسير ثماني بتات المخزن المؤقت باستخدام القليل
وظائف ذات مستوى أعلى "lex_peek_unichar" و "lex_read_unichar".

PL_parser-> linestart
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يشير إلى بداية السطر الحالي داخل المخزن المؤقت lexer. وهذا مفيد
للإشارة إلى العمود الذي حدث فيه الخطأ ، وليس أكثر من ذلك. هذا يجب أن يكون
تم تحديثه بواسطة أي كود lexing يستهلك سطرًا جديدًا ؛ الوظيفة "lex_read_to"
يعالج هذه التفاصيل.

PL_parser-> linestr
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

عددية المخزن المؤقت التي تحتوي على الجزء قيد النظر حاليًا من النص
يجري حاليا lexed. هذا هو دائما عدد سلسلة عادي (الذي "SvPOK" هو
حقيقي). لا يُقصد استخدامه كمقياس عددي بالوسائل العددية العادية ؛ بدلاً من
ارجع إلى المخزن المؤقت مباشرة بواسطة متغيرات المؤشر الموضحة أدناه.

يحتفظ lexer بالعديد من مؤشرات "char *" للأشياء الموجودة في "PL_parser-> linestr"
متعادل. إذا تمت إعادة تخصيص "PL_parser-> linestr" ، فيجب على كل هذه المؤشرات
يتم تحديث. لا تحاول القيام بذلك يدويًا ، ولكن استخدم "lex_grow_linestr"
إذا كنت بحاجة إلى إعادة تخصيص المخزن المؤقت.

عادةً ما يكون محتوى مقطع النص في المخزن المؤقت سطرًا واحدًا كاملاً تمامًا
من المدخلات ، بما في ذلك فاصل سطر جديد ، ولكن هناك حالات يكون فيها
هو خلاف ذلك. قد يكون المقصود من ثماني بتات المخزن المؤقت أن يتم تفسيرها على أنها
إما UTF-8 أو Latin-1. الوظيفة "lex_bufutf8" تخبرك بأي ملف. لا تستخدم
علامة "SvUTF8" على هذا العددية ، والتي قد تختلف معها.

للفحص المباشر للمخزن المؤقت ، يشير المتغير "PL_parser-> bufend" إلى
نهاية المخزن المؤقت. يشار إلى موقع lexing الحالي بواسطة
"PL_parser-> bufptr". يفضل استخدام هذه المؤشرات بشكل مباشر
فحص العددية من خلال الوسائل العددية العادية.

اللغة ذات الصلة وظائف وحدات الماكرو


DECLARATION_FOR_LC_NUMERIC_MANIPULATION
يجب استخدام هذا الماكرو كعبارة. تعلن عن متغير خاص (الذي
الاسم يبدأ بشرطة سفلية) التي تحتاجها وحدات الماكرو الأخرى في هذا
قسم. يجب أن يؤدي عدم تضمين هذا بشكل صحيح إلى خطأ في بناء الجملة. ل
التوافق مع مترجمي C89 C يجب وضعه في كتلة قبل أي
عبارات قابلة للتنفيذ.

DECLARATION_FOR_LC_NUMERIC_MANIPULATION باطل

RESTORE_LC_NUMERIC
يتم استخدام هذا مع أحد وحدات الماكرو
"STORE_LC_NUMERIC_SET_TO_NEEDED" و "STORE_LC_NUMERIC_FORCE_TO_UNDERLYING"

لاستعادة الحالة "LC_NUMERIC" بشكل صحيح.

يجب إجراء استدعاء لـ "DECLARATION_FOR_LC_NUMERIC_MANIPULATION" للإعلان
في وقت الترجمة ، متغير خاص يستخدمه هذا الماكرو والمتغيران "STORE".
يجب تسمية هذا الماكرو على أنه عبارة واحدة ، وليس تعبيرًا ، ولكن بامتداد
قائمة الحجج الفارغة ، مثل هذا:

{
DECLARATION_FOR_LC_NUMERIC_MANIPULATION ،

RESTORE_LC_NUMERIC () ،

}

RESTORE_LC_NUMERIC باطل ()

STORE_LC_NUMERIC_FORCE_TO_UNDERLYING
يتم استخدام هذا بواسطة تعليمات XS البرمجية التي تعرف اللغة "LC_NUMERIC" لفرض اللغة
بالنسبة للفئة "LC_NUMERIC" لتكون ما تعتقد perl أنها اللغة الأساسية الحالية.
(قد يكون مفسر perl مخطئًا بشأن ما هي اللغة الأساسية في الواقع
إذا كانت بعض أكواد C أو XS تسمى وظيفة مكتبة C. مجموعة(3) خلفه
خلف؛ سيؤدي استدعاء "sync_locale" قبل استدعاء هذا الماكرو إلى تحديث سجلات perl.)

يجب إجراء استدعاء لـ "DECLARATION_FOR_LC_NUMERIC_MANIPULATION" للإعلان
في وقت الترجمة ، متغير خاص يستخدمه هذا الماكرو. يجب أن يكون هذا الماكرو
يُطلق عليه بيان واحد ، وليس تعبيرًا ، ولكن بقائمة وسيطة فارغة ،
مثله:

{
DECLARATION_FOR_LC_NUMERIC_MANIPULATION ،

STORE_LC_NUMERIC_FORCE_TO_UNDERLYING () ،

RESTORE_LC_NUMERIC () ،

}

يتم استخدام المتغير الخاص لحفظ حالة اللغة الحالية ، بحيث يكون ملف
يمكن لاستدعاء المطابقة المطلوب لـ "RESTORE_LC_NUMERIC" استعادته.

STORE_LC_NUMERIC_FORCE_TO_UNDERLYING () باطلة

STORE_LC_NUMERIC_SET_TO_NEEDED
يستخدم هذا للمساعدة في التفاف التعليمات البرمجية XS أو C التي تعرف اللغة "LC_NUMERIC".
يتم تحديد فئة اللغة هذه بشكل عام على لغة C بواسطة Perl للخلف
التوافق ، ولأن معظم أكواد XS التي تقرأ قيم الفاصلة العائمة يمكنها التأقلم
فقط مع كون حرف الجذر العشري نقطة.

يتأكد هذا الماكرو من تعيين حالة "LC_NUMERIC" الحالية بشكل صحيح ، لتكون على علم
من اللغة المحلية إذا كان الاستدعاء إلى كود XS أو C من برنامج Perl من داخل
نطاق "استخدام لغة" ؛ أو لتجاهل اللغة إذا كانت المكالمة بدلاً من ذلك من الخارج
هذا النطاق.

هذا الماكرو هو بداية التفاف التعليمات البرمجية C أو XS؛ يتم الانتهاء من التفاف بواسطة
استدعاء الماكرو "RESTORE_LC_NUMERIC" بعد العملية. وإلا فإن الدولة
يمكن تغييره مما سيؤثر سلبًا على كود XS الآخر.

يجب إجراء استدعاء لـ "DECLARATION_FOR_LC_NUMERIC_MANIPULATION" للإعلان
في وقت الترجمة ، متغير خاص يستخدمه هذا الماكرو. يجب أن يكون هذا الماكرو
يُطلق عليه بيان واحد ، وليس تعبيرًا ، ولكن بقائمة وسيطة فارغة ،
مثله:

{
DECLARATION_FOR_LC_NUMERIC_MANIPULATION ،

STORE_LC_NUMERIC_SET_TO_NEEDED () ،

RESTORE_LC_NUMERIC () ،

}

STORE_LC_NUMERIC_SET_TO_NEEDED باطلة ()

sync_locale
يجب تجنب تغيير لغة البرنامج بواسطة كود XS. ومع ذلك ، أكيد
المكتبات غير التابعة لـ Perl التي يتم استدعاؤها من XS ، مثل "Gtk" تفعل ذلك. عندما يحدث هذا ، بيرل
يجب إخباره أن اللغة قد تغيرت. استخدم هذه الوظيفة للقيام بذلك ، من قبل
العودة إلى بيرل.

sync_locale باطلة ()

سحري وظائف


mg_clear
امسح شيئًا سحريًا يمثله SV. انظر "sv_magic".

int mg_clear (SV * sv)

mg_copy ينسخ السحر من SV إلى آخر. انظر "sv_magic".

int mg_copy (SV * sv، SV * nsv، const char * key،
I32 كلن)

mg_find يعثر على المؤشر السحري للنوع المطابق لـ SV. انظر "sv_magic".

MAGIC * mg_find (const SV * sv ، نوع int)

mg_findext
البحث عن المؤشر السحري لـ "type" باستخدام "vtbl" المحدد لـ "SV". يرى
"sv_magicext".

MAGIC * mg_findext (const SV * sv ، نوع int ،
const MGVTBL * vtbl)

mg_free خالية من أي تخزين سحري يستخدمه SV. انظر "sv_magic".

int mg_free (SV * sv)

mg_free_type
أزل أي نوع من السحر كيف من SV sv. انظر "sv_magic".

باطل mg_free_type (SV * sv، int how)

mg_get افعل السحر قبل أن يتم استرداد قيمة من SV. يجب أن يكون نوع SV> =
SVt_PVMG. انظر "sv_magic".

int mg_get (SV * sv)

mg_length
إهمال! من المخطط إزالة هذه الوظيفة من إصدار مستقبلي لـ Perl.
لا تستخدمه للرمز الجديد ؛ إزالته من التعليمات البرمجية الموجودة.

تقارير عن طول SV بالبايت ، استدعاء سحر الطول إذا كان متاحًا ، لكنه يفعل ذلك
لم يتم تعيين علامة UTF8 على sv. سوف يعود إلى "الحصول على" السحر إذا لم يكن هناك
سحر "الطول" ، ولكن بدون إشارة إلى ما إذا كان يطلق عليه سحر "الحصول على". هو - هي
يفترض أن sv هو PVMG أو أعلى. يستخدم sv_len () بدلا من ذلك.

U32 mg_length (SV * sv)

mg_magical
يقوم بتشغيل الحالة السحرية لـ SV. انظر "sv_magic".

باطل mg_magical (SV * sv)

mg_set افعل السحر بعد تعيين قيمة إلى SV. انظر "sv_magic".

int mg_set (SV * sv)

سفجيتماجيك
استدعاء "mg_get" على SV إذا كان يحتوي على سحر "get". على سبيل المثال ، هذا سوف يستدعي
"إحضار" على متغير مرتبط. يقوم هذا الماكرو بتقييم حجته أكثر من مرة.

باطل SvGETMAGIC (SV * sv)

SvLOCK يرتب للحصول على قفل الاستبعاد المتبادل على sv إذا كانت الوحدة المناسبة بها
تم تحميله.

باطل SvLOCK (SV * sv)

SvSETMAGIC
استدعاء "mg_set" على SV إذا كان يحتوي على سحر "set". هذا ضروري بعد
تعديل الحجمي ، في حال كان متغيرًا سحريًا مثل $ | أو متغير مقيد
(يطلق عليه "STORE"). يقوم هذا الماكرو بتقييم حجته أكثر من مرة.

SvSETMAGIC باطل (SV * sv)

SvSetMagicSV
مثل "SvSetSV" ، لكنه يفعل أي مجموعة سحرية مطلوبة بعد ذلك.

باطل SvSetMagicSV (SV * dsv ، SV * ssv)

SvSetMagicSV_nosteal
مثل "SvSetSV_nosteal" ، لكنه يفعل أي مجموعة سحرية مطلوبة بعد ذلك.

باطل SvSetMagicSV_nosteal (SV * dsv ، SV * ssv)

يستدعي SvSetSV "sv_setsv" إذا لم يكن dsv هو نفسه ssv. قد تقيم الحجج أكثر من
مرة واحدة. لا يتعامل مع السحر "المحدد" على الوجهة SV.

باطل SvSetSV (SV * dsv ، SV * ssv)

SvSetSV_nosteal
لاستدعاء إصدار غير مدمر من "sv_setsv" إذا لم يكن dsv هو نفسه ssv. يمكن
تقييم الحجج أكثر من مرة.

باطل SvSetSV_nosteal (SV * dsv ، SV * ssv)

SvSHARE ترتيب مشاركة sv بين سلاسل الرسائل إذا تم تحميل وحدة مناسبة.

SvSHARE باطل (SV * sv)

سفونلوك
يحرر قفل الاستبعاد المتبادل على sv إذا تم تحميل وحدة مناسبة.

باطل SvUNLOCK (SV * sv)

ذاكرة الإدارة


انسخ واجهة كاتب XSUB إلى وظيفة "memcpy". "src" هي المصدر ،
"dest" هو الوجهة ، و "nitems" هو عدد العناصر ، و "type" هو
يكتب. قد تفشل في النسخ المتداخلة. انظر أيضا "نقل".

نسخة باطلة (void * src، void * dest، int nitems، type)

CopyD مثل "نسخ" ولكن إرجاع dest. مفيد لتشجيع المترجمين على استدعاء الذيل
تحسين.

void * CopyD (void * src، void * dest، int nitems، type)

انقل واجهة كاتب XSUB إلى وظيفة "memmove". "src" هي المصدر ،
"dest" هو الوجهة ، و "nitems" هو عدد العناصر ، و "type" هو
يكتب. يمكنه القيام بحركات متداخلة. انظر أيضًا "نسخ".

نقل باطل (void * src ، void * dest ، int nitems ، type)

MoveD مثل "نقل" ولكن إرجاع dest. مفيد لتشجيع المترجمين على استدعاء الذيل
تحسين.

void * MoveD (void * src، void * dest، int nitems، type)

Newx واجهة XSUB-Writer لوظيفة C "malloc".

يجب أن يتم الحصول على الذاكرة من خلال هذا فقط تحرر مع "Safefree".

في 5.9.3، نيو اكس () والأصدقاء استبدال كبار السن جديد () API ، ويسقط الأول
معامل، x، أداة تصحيح الأخطاء التي سمحت للمتصلين بتعريف أنفسهم. هذه المساعدة
تم استبداله بخيار إنشاء جديد، PERL_MEM_LOG (راجع "PERL_MEM_LOG" في
بيرلهاكتيبس). لا تزال واجهة برمجة التطبيقات الأقدم موجودة للاستخدام في دعم وحدات XS
بيرل أقدم.

باطلة Newx (باطلة * ptr، int nitems، اكتب)

Newxc واجهة كاتب XSUB لوظيفة C "malloc"، مع cast. أنظر أيضا
"نيوكس".

يجب أن يتم الحصول على الذاكرة من خلال هذا فقط تحرر مع "Safefree".

باطلة Newxc (باطلة * ptr، int nitems، type، cast)

Newxz واجهة كاتب XSUB لوظيفة C "malloc". الذاكرة المخصصة هي
صفر مع "memzero". انظر أيضًا "نيوكس".

يجب أن يتم الحصول على الذاكرة من خلال هذا فقط تحرر مع "Safefree".

باطلة Newxz (باطلة * ptr، int nitems، اكتب)

سم PoisonWith(0xEF) للوصول إلى الذاكرة المحررة.

السم الباطل (باطل * الوجهة، العناصر الداخلية، النوع)

خالي من السموم
PoisonWith(0xEF) للوصول إلى الذاكرة المحررة.

باطلة PoisonFree(void* dest, int nitems, type)

السم جديد
PoisonWith(0xAB) للوصول إلى الذاكرة المخصصة ولكن غير المهيأة.

باطلة PoisonNew (باطل * الوجهة، العناصر الداخلية، النوع)

PoisonWith
املأ الذاكرة بنمط البايت (بايت يتكرر مرارًا وتكرارًا).
نأمل أن يمسك بمحاولات الوصول إلى الذاكرة غير المهيأة.

باطلة PoisonWith (void * dest، int nitems، type،
بايت U8)

قم بتجديد واجهة كاتب XSUB إلى وظيفة C "realloc".

يجب أن يتم الحصول على الذاكرة من خلال هذا فقط تحرر مع "Safefree".

تجديد باطلة (باطل * ptr، int nitems، اكتب)

قم بتجديد واجهة كاتب XSUB إلى وظيفة C "realloc"، مع الإرسال.

يجب أن يتم الحصول على الذاكرة من خلال هذا فقط تحرر مع "Safefree".

تجديد الفراغ (باطل * ptr، int nitems، النوع، cast)

آمن
واجهة كاتب XSUB لوظيفة C "المجانية".

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

باطلة Safefree (باطلة * ptr)

إصدار savepv Perl من "strdup()". إرجاع مؤشر إلى سلسلة مخصصة حديثًا والتي
هي نسخة مكررة من "pv". يتم تحديد حجم السلسلة بواسطة "strlen ()"، والتي
يعني أنه قد لا يحتوي على أحرف "NUL" مضمنة ويجب أن يحتوي على "NUL" لاحقة.
يمكن تحرير الذاكرة المخصصة للسلسلة الجديدة باستخدام "Safefree()"
وظيفة.

في بعض الأنظمة الأساسية، Windows على سبيل المثال، تكون كافة الذاكرة المخصصة المملوكة لسلسلة رسائل
إلغاء تخصيصها عندما ينتهي هذا الموضوع. لذا، إذا كنت تريد ألا يحدث ذلك، فأنت بحاجة إلى ذلك
استخدم وظائف الذاكرة المشتركة، مثل "savesharedpv".

شار* savepv(const شار* الكهروضوئية)

إصدار savepvn Perl لما سيكون عليه "strndup()" إذا كان موجودًا. إرجاع المؤشر إلى أ
السلسلة المخصصة حديثًا والتي تعد نسخة مكررة من بايتات "len" الأولى من "pv"،
بالإضافة إلى بايت "NUL" زائدة. يمكن تحرير الذاكرة المخصصة للسلسلة الجديدة
باستخدام وظيفة "Safefree()".

في بعض الأنظمة الأساسية، Windows على سبيل المثال، تكون كافة الذاكرة المخصصة المملوكة لسلسلة رسائل
إلغاء تخصيصها عندما ينتهي هذا الموضوع. لذا، إذا كنت تريد ألا يحدث ذلك، فأنت بحاجة إلى ذلك
استخدم وظائف الذاكرة المشتركة، مثل "savesharedpvn".

شار* savepvn(const شار* الكهروضوئية، I32 لين)

savepvs مثل "savepvn"، ولكنه يأخذ سلسلة حرفية منتهية بـ "NUL" بدلاً من
زوج سلسلة / طول.

شار * savepvs (const char * s)

savesharedpv
إصدار من "savepv()" يخصص السلسلة المكررة في الذاكرة وهي
المشتركة بين المواضيع.

شار * savesharedpv (const شار * الكهروضوئية)

com.savesharedpvn
إصدار من "savepvn()" يخصص السلسلة المكررة في الذاكرة وهي
المشتركة بين المواضيع. (مع الاختلاف المحدد في أن المؤشر NULL ليس كذلك
مقبول)

شار* savesharedpvn(const شار *const pv,
كونست سترلين لين)

savesharedpvs
إصدار من "savepvs()" يخصص السلسلة المكررة في الذاكرة وهي
المشتركة بين المواضيع.

شار * savesharedpvs (const char * s)

savesharedsvpv
إصدار من "savesharedpv()" الذي يخصص السلسلة المكررة في الذاكرة والتي
يتم مشاركتها بين المواضيع.

شار* savesharedsvpv(SV *sv)

savevpv
إصدار من "savepv()"/"savepvn()" الذي يحصل على السلسلة المراد تكرارها من
تم تمريره في SV باستخدام "SvPV()"

في بعض الأنظمة الأساسية، Windows على سبيل المثال، تكون كافة الذاكرة المخصصة المملوكة لسلسلة رسائل
إلغاء تخصيصها عندما ينتهي هذا الموضوع. لذا، إذا كنت تريد ألا يحدث ذلك، فأنت بحاجة إلى ذلك
استخدم وظائف الذاكرة المشتركة، مثل "savesharedsvpv".

شار * savesvpv (SV * sv)

نسخة من البنية
هذا ماكرو مستقل عن البنية لنسخ بنية إلى أخرى.

نسخة باطلة (اكتب *src، اكتب *dest، اكتب)

صفر واجهة كاتب XSUB لوظيفة C "memzero". "الوجهة" هي
الوجهة، و"العناصر" هي عدد العناصر، و"النوع" هو النوع.

باطلة صفر (باطلة * الوجهة، int nitems، نوع)

ZeroD مثل "Zero" لكنه يُرجع الوجهة. مفيد لتشجيع المترجمين على الاتصال بالذيل
تحسين.

باطلة * ZeroD (باطلة * الوجهة، العناصر الداخلية، النوع)

منوع وظائف


Dump_c_backtrace
تفريغ التتبع الخلفي لـ C إلى fp المحدد.

يُرجع صحيحًا إذا كان من الممكن استرداد التتبع العكسي، ويُرجع خطأ إذا لم يكن كذلك.

bool dump_c_backtrace(PerlIO* fp, int max_ Deep,
تخطي int)

fbm_compile
يقوم بتحليل السلسلة من أجل إجراء عمليات بحث سريعة عليها باستخدام fbm_instr() -- ال
خوارزمية بوير مور.

باطلة fbm_compile (SV * sv، أعلام U32)

fbm_instr
إرجاع موقع SV في السلسلة المحددة بـ "big" و"bigend". هو - هي
تُرجع "NULL" إذا تعذر العثور على السلسلة. لا يجب أن يكون "sv".
fbm_compiled، ولكن البحث لن يكون سريعًا بعد ذلك.

شار* fbm_instr(شار* غير موقع كبير،
غير موقعة شار* بيجند، SV* ليتلستر،
أعلام U32)

FoldEQ يُرجع صحيحًا إذا كانت بايتات len البادئة للسلسلتين s1 وs2 هي نفس حالة الأحرف
بشكل غير حساس؛ كاذبة خلاف ذلك. تتطابق بايتات نطاق ASCII بين الأحرف الكبيرة والصغيرة
أنفسهم ونظرائهم في الحالة المعاكسة. نطاق غير مغلف وغير ASCII
البايتات تتطابق فقط مع نفسها.

I32foldEQ(const char* a, const char* b, I32 len)

FoldEQ_locale
يُرجع صحيحًا إذا كانت بايتات len البادئة للسلاسل s1 وs2 هي نفس حالة الأحرف-
بشكل غير حساس في اللغة الحالية؛ كاذبة خلاف ذلك.

I32 FoldEQ_locale(const char* a, const char* b,
I32 لين)

يأخذ النموذج نمط تنسيق sprintf والوسائط التقليدية (غير SV) و
تقوم بإرجاع السلسلة المنسقة.

(char *) Perl_form(pTHX_ const char* pat, ...)

يمكن استخدامها في أي مكان حيث تكون السلسلة (char *) مطلوبة:

char * s = Perl_form("%d.%d",major,minor);

يستخدم مخزنًا مؤقتًا خاصًا واحدًا، لذلك إذا كنت تريد تنسيق عدة سلاسل، فيجب عليك ذلك
انسخ السلاسل السابقة بشكل صريح (وحرر النسخ عند الانتهاء).

نموذج شار* (كونست شار* بات، ...)

getcwd_sv
املأ SV بدليل العمل الحالي

إنت getcwd_sv(SV* sv)

get_c_backtrace_dump
إرجاع SV تفريغ |العمق| إطارات مكدس الاستدعاءات، متخطية |تخطي|
الأعمق. عمق 20 عادة ما يكون كافيا.

يبدو الإخراج الملحق كما يلي:

... 1 10e004812:0082 Perl_croak util.c:1716 / البيرة / بن / بيرل 2
10df8d6d2:1d72 perl_parse perl.c:3975 / البيرة / بن / بيرل

الحقول مفصولة بعلامات جدولة. العمود الأول هو العمق (الصفر هو
الإطار الأعمق غير المتخطي). في الشكل السداسي: الإزاحة، يكون الرمز السداسي هو مكان البرنامج
كان العداد في S_parse_body، و: الإزاحة (قد تكون مفقودة) توضح مقدار ذلك
داخل S_parse_body كان عداد البرنامج.

util.c:1716 هو ملف التعليمات البرمجية المصدر ورقم السطر.

تشير / البيرة / بن / بيرل واضح (نأمل).

المجهولة هي "-". يمكن أن تحدث حالات مجهولة بسهولة تامة للأسف: إذا كانت المنصة
لا يدعم استرجاع المعلومات؛ إذا كان الثنائي يفتقد التصحيح
معلومة؛ إذا قام المحسن بتحويل التعليمات البرمجية عن طريق التضمين على سبيل المثال.

SV* get_c_backtrace_dump(int max_ Deep, int Skip)

ibcmp هذا مرادف لـ (! FoldEQ())

I32 ibcmp(const char* a, const char* b, I32 len)

ibcmp_locale
وهذا مرادف لـ (! FoldEQ_locale())

I32 ibcmp_locale(const char* a, const char* b,
I32 لين)

is_safe_syscall
اختبر أن "pv" المحدد لا يحتوي على أي أحرف "NUL" داخلية. لو أنه
قم بذلك، واضبط "errno" على ENOENT، ثم قم بالتحذير بشكل اختياري، ثم قم بإرجاع FALSE.

قم بإرجاع TRUE إذا كان الاسم آمنًا.

المستخدمة من قبل IS_SAFE_SYSCALL() دقيق.

bool is_safe_syscall(const char *pv, STRLEN len,
ثابت شار * ماذا ،
حرف ثابت *op_name)

memEQ اختبر مخزنين مؤقتين (قد يحتويان على أحرف "NUL" مضمنة، لمعرفة ما إذا كانا كذلك
متساوي. تشير المعلمة "len" إلى عدد البايتات المراد مقارنتها. عائدات
صفر إذا كان متساويًا، أو غير صفر إذا كان غير متساوٍ.

bool memEQ(char* s1, char* s2, STRLEN len)

memNE اختبر مخزنين مؤقتين (قد يحتويان على أحرف "NUL" مضمنة، لمعرفة ما إذا كانا كذلك أم لا
غير متساوي. تشير المعلمة "len" إلى عدد البايتات المراد مقارنتها. عائدات
صفر إذا كان غير متساوٍ، أو غير صفر إذا كان متساويًا.

منطقي memNE (شار * s1، شار * s2، لين STRLEN)

الفوضى خذ نمط تنسيق وقائمة وسيطات على نمط sprintf. وتستخدم هذه لتوليد
رسالة سلسلة. إذا لم تنتهي الرسالة بسطر جديد، فستكون كذلك
ممتد مع بعض الإشارة إلى الموقع الحالي في الكود، كما هو موضح
لـ "mess_sv".

عادةً، يتم إرجاع الرسالة الناتجة في SV بشري جديد. خلال العالمية
يمكن مشاركة تدمير SV واحد بين استخدامات هذه الوظيفة.

SV * الفوضى (const char *pat، ...)

mess_sv يوسع الرسالة المخصصة للمستخدم لتشمل إشارة إلى التيار
الموقع في الكود، إذا لم تكن الرسالة تبدو مكتملة بالفعل.

"basemsg" هي الرسالة أو الكائن الأولي. إذا كان مرجعا، سيتم استخدامه
كما هو وسيكون نتيجة لهذه الوظيفة. وإلا يتم استخدامه كسلسلة،
وإذا انتهى بالفعل بسطر جديد، يؤخذ على أنه كامل، وعلى النتيجة
لهذه الوظيفة ستكون نفس السلسلة. إذا لم تنتهي الرسالة بـ a
السطر الجديد، ثم سيتم إلحاق مقطع مثل "في السطر foo.pl 37"، وربما
بنود أخرى تشير إلى الوضع الحالي للتنفيذ. الرسالة الناتجة
سينتهي بنقطة وسطر جديد.

عادةً، يتم إرجاع الرسالة الناتجة في SV بشري جديد. خلال العالمية
يمكن مشاركة تدمير SV واحد بين استخدامات هذه الوظيفة. إذا "استهلك"
صحيح، فيُسمح للوظيفة (لكنها غير مطلوبة) بالتعديل والإرجاع
"basemsg" بدلاً من تخصيص SV جديد.

SV * mess_sv (SV *basemsg، استهلاك منطقي)

my_snprintf
وظيفة "snprintf" لمكتبة C، إذا كانت متوفرة ومتوافقة مع المعايير (تستخدم
"vsnprintf"، في الواقع). ومع ذلك، إذا لم يكن "vsnprintf" متاحًا، فسيتم ذلك
لسوء الحظ، استخدم "vsprintf" غير الآمن الذي يمكنه تجاوز المخزن المؤقت (يوجد ملف
التحقق من التجاوز، ولكن قد يكون ذلك متأخرًا جدًا). فكر في استخدام "sv_vcatpvf" بدلاً من ذلك، أو
الحصول على "vsnprintf".

int my_snprintf(char *buffer, const Size_t len,
const char * التنسيق، ...)

my_sprintf
يتم تغليف مكتبة C "sprintf" إذا لزم الأمر للتأكد من أنها ستعيد ملف
طول السلسلة المكتوبة إلى المخزن المؤقت. فقط أنظمة ما قبل ANSI النادرة هي التي تحتاج إلى
وظيفة التغليف - عادةً ما تكون هذه مكالمة مباشرة لـ "sprintf".

int my_sprintf(char *buffer, const char *pat, ...)

my_strlcat
مكتبة C "strlcat" إذا كانت متوفرة، أو تطبيق Perl لها. هذا
يعمل على سلاسل C "NUL" منتهية.

يقوم "my_strlcat()" بإلحاق السلسلة "src" بنهاية "dst". سيتم إلحاقه على الأكثر
أحرف "الحجم - strlen(dst) - 1". سيتم بعد ذلك إنهاء "NUL"، ما لم يكن "الحجم"
هو 0 أو أن سلسلة "dst" الأصلية كانت أطول من "size" (في الممارسة العملية، يجب أن يكون هذا
لا يحدث لأنه يعني أن "الحجم" غير صحيح أو أن "التوقيت الصيفي" ليس كذلك
سلسلة منتهية بـ "NUL" مناسبة).

لاحظ أن "الحجم" هو الحجم الكامل للمخزن المؤقت للوجهة والنتيجة هي
مضمون أن يكون "NUL" - منتهيًا إذا كان هناك مكان. لاحظ تلك الغرفة لـ "NUL"
ينبغي أن تدرج في "الحجم".

Size_t my_strlcat(char *dst, const char *src,
الحجم_حجم)

my_strlcpy
مكتبة C "strlcpy" إذا كانت متوفرة، أو تطبيق Perl لها. هذا
يعمل على سلاسل C "NUL" منتهية.

يقوم "my_strlcpy()" بنسخ ما يصل إلى "حجم - 1" من الأحرف من السلسلة "src" إلى "dst"،
"NUL" - إنهاء النتيجة إذا لم يكن "الحجم" 0.

Size_t my_strlcpy(char *dst, const char *src,
الحجم_حجم)

my_vsnprintf
مكتبة C "vsnprintf" إذا كانت متوفرة ومتوافقة مع المعايير. ومع ذلك، إذا
"vsnprintf" غير متوفر، ولسوء الحظ سيتم استخدام "vsprintf" غير الآمن
والتي يمكن أن تتجاوز المخزن المؤقت (هناك فحص تجاوز، ولكن قد يكون ذلك أيضًا
متأخر). فكر في استخدام "sv_vcatpvf" بدلاً من ذلك، أو الحصول على "vsnprintf".

int my_vsnprintf(char *buffer, const Size_t len,
const char *format، va_list ap)

بيرل_SYS_INIT
يوفر ضبطًا خاصًا بالنظام لبيئة تشغيل C اللازمة للتشغيل
مترجمو بيرل. يجب أن يتم استدعاء هذا مرة واحدة فقط، قبل إنشاء أي لغة Perl
مترجمين فوريين.

باطلة PERL_SYS_INIT(int *argc, char*** argv)

بيرل_SYS_INIT3
يوفر ضبطًا خاصًا بالنظام لبيئة تشغيل C اللازمة للتشغيل
مترجمو بيرل. يجب أن يتم استدعاء هذا مرة واحدة فقط، قبل إنشاء أي لغة Perl
مترجمين فوريين.

باطلة PERL_SYS_INIT3(int *argc, char*** argv,
شار *** إنف)

بيرل_SYS_TERM
يوفر تنظيفًا خاصًا بالنظام لبيئة تشغيل C بعد تشغيل Perl
المترجمين الفوريين. يجب استدعاء هذا مرة واحدة فقط، بعد تحرير أي لغة Perl متبقية
مترجمين فوريين.

باطلة PERL_SYS_TERM ()

Quadmath_format_needed
Quadmath_format_needed() يُرجع صحيحًا إذا بدا أن سلسلة التنسيق تحتوي على at
محدد تنسيق %[efgaEFGA] واحد على الأقل غير مسبوق بـ Q، أو يُرجع خطأ بخلاف ذلك.

إن اكتشاف محدد التنسيق ليس اكتشافًا كاملاً لصيغة printf، ولكنه
ينبغي التقاط الحالات الأكثر شيوعا.

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

منطقي Quadmath_format_needed (تنسيق Const char*)

Quadmath_format_single
Quadmath_snprintf() صارمة للغاية فيما يتعلق بسلسلة التنسيق الخاصة بها وسوف تفشل،
إرجاع -1، إذا كان التنسيق غير صالح. يقبل مواصفات تنسيق واحدة بالضبط.

Quadmath_format_single() التحقق من أن المواصفات الفردية المقصودة تبدو سليمة: يبدأ
مع "%"، ويحتوي على "%" واحد فقط، وينتهي بـ "[efgaEFGA]"، وقبله "Q". هذا
ليس "فحصًا لبناء جملة printf" كاملاً، بل الأساسيات فقط.

إرجاع التنسيق إذا كان صالحاً، NULL إذا لم يكن كذلك.

Quadmath_format_single() يمكن وسيقوم بالفعل بتصحيح "Q" المفقود، إذا
ضروري. في هذه الحالة سيتم إرجاع النسخة المعدلة من التنسيق، التي هيه
المتصل سوف حاجة إلى الحرة.

راجع أيضًا "quadmath_format_needed".

const char* Quadmath_format_single(const char* تنسيق)

READ_XDIGIT
تُرجع قيمة الرقم السداسي لنطاق ASCII وتقدم مؤشر السلسلة.
يتم تعريف السلوك بشكل جيد فقط عندما تكون قيمة isXDIGIT(*str) صحيحة.

U8 READ_XDIGIT (حرف شارع *)

strEQ اختبر سلسلتين لمعرفة ما إذا كانتا متساويتين. إرجاع صحيح أو خطأ.

سلسلة منطقية (شار* s1، شار* s2)

strGE اختبر سلسلتين لمعرفة ما إذا كانت السلسلة الأولى "s1" أكبر من أو تساوي
والثاني "س2". إرجاع صحيح أو خطأ.

سلسلة منطقية (شار* s1، شار* s2)

strGT اختبر سلسلتين لمعرفة ما إذا كانت الأولى "s1" أكبر من الثانية "s2".
إرجاع صحيح أو خطأ.

منطقية strGT (تشار * s1، شار * s2)

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

سلسلة منطقية (شار* s1، شار* s2)

strLT اختبر سلسلتين لمعرفة ما إذا كانت الأولى "s1" أقل من الثانية "s2".
إرجاع صحيح أو خطأ.

منطقية strLT(شار* s1، شار* s2)

strNE اختبر سلسلتين لمعرفة ما إذا كانتا مختلفتين. إرجاع صحيح أو خطأ.

منطقية سترني (شار * s1، شار * s2)

strnEQ اختبر سلسلتين لمعرفة ما إذا كانتا متساويتين. تشير المعلمة "len" إلى
عدد البايتات للمقارنة. إرجاع صحيح أو خطأ. (مجمع لـ "strncmp").

bool strnEQ (char* s1, char* s2, STRLEN len)

strnNE اختبر سلسلتين لمعرفة ما إذا كانتا مختلفتين. تشير المعلمة "len" إلى
عدد البايتات للمقارنة. إرجاع صحيح أو خطأ. (مجمع لـ "strncmp").

منطقي strnNE (شار* s1، شار* s2، سترلين لين)

sv_destroyable
الروتين الوهمي الذي يُبلغ عن إمكانية تدمير هذا الكائن في حالة عدم وجود مشاركة
الوحدة موجودة. يتجاهل وسيطة SV الفردية الخاصة به، ويعيد القيمة "صحيح". موجود ل
تجنب اختبار مؤشر دالة NULL ولأنه من المحتمل أن يتم التحذير منه
مستوى معين من الصرامة.

منطقي sv_destroyable(SV *sv)

sv_nosharing
الروتين الوهمي الذي "يشارك" ملف SV في حالة عدم وجود وحدة مشاركة. أو
"يقفلها". أو "يفتح" ذلك. بمعنى آخر، يتجاهل وسيطة SV الفردية الخاصة به.
موجود لتجنب اختبار مؤشر دالة NULL ولأنه من المحتمل أن يكون ذلك
تحذير تحت مستوى معين من الصرامة.

باطلة sv_nosharing (SV *sv)

vmess "pat" و"args" هما نمط تنسيق بنمط sprintf ووسيطة مغلفة
قائمة. يتم استخدامها لإنشاء رسالة سلسلة. إذا لم تنتهي الرسالة
مع سطر جديد، ثم سيتم تمديده مع بعض الإشارة إلى التيار
الموقع في الكود، كما هو موضح في "mess_sv".

عادةً، يتم إرجاع الرسالة الناتجة في SV بشري جديد. خلال العالمية
يمكن مشاركة تدمير SV واحد بين استخدامات هذه الوظيفة.

SV * vmess(const char *pat, va_list *args)

MRO وظائف


ترتبط هذه الوظائف بترتيب دقة الطريقة لفئات Perl

mro_get_linear_isa
يُرجع الخطية mro للمخبأة المحددة. افتراضيا، سيكون هذا
أيًا كان ما يُرجعه "mro_get_linear_isa_dfs" ما لم يكن هناك بعض MRO آخر ساري المفعول
المخبأ. القيمة المرجعة هي AV للقراءة فقط*.

أنت مسؤول عن "SvREFCNT_inc()" في قيمة الإرجاع إذا كنت تخطط للتخزين
في أي مكان بشكل شبه دائم (وإلا فقد يتم حذفه من تحتك
في المرة القادمة يتم إبطال ذاكرة التخزين المؤقت).

AV* mro_get_linear_isa(HV* مخبأ)

mro_method_changed_in
يبطل طريقة التخزين المؤقت لأي فئة فرعية من المخبأ المحدد، بحيث
قد تلاحظ التغييرات في هذا واحد.

من الناحية المثالية، كافة مثيلات "PL_sub_generation++" في مصدر Perl خارج mro.c
يجب استبداله بالمكالمات إلى هذا.

يتعامل Perl تلقائيًا مع معظم الطرق الشائعة لإعادة تعريف الطريقة.
ومع ذلك، هناك بعض الطرق التي يمكنك من خلالها تغيير الطريقة في المخبأ دون الحاجة إلى
ملاحظة رمز ذاكرة التخزين المؤقت، وفي هذه الحالة تحتاج إلى استدعاء هذه الطريقة بعد ذلك:

1) التعامل مباشرة مع إدخالات HV المخزنة من كود XS.

2) تعيين مرجع إلى ثابت عددي للقراءة فقط في إدخال مخبأ بالترتيب
لإنشاء روتين فرعي ثابت (كما يفعل Constant.pm).

هذه الطريقة نفسها متاحة من Perl النقي عبر،
"mro::method_changed_in(classname)".

باطلة mro_method_changed_in (مخبأ HV *)

mro_register
يسجل البرنامج المساعد mro مخصص. راجع بيرلمروبي للحصول على التفاصيل.

باطلة mro_register (const struct mro_alg *mro)

مكالمة متعددة وظائف


dMULTICALL
قم بتعريف المتغيرات المحلية لمكالمة متعددة. راجع "عمليات الاسترجاعات خفيفة الوزن" في perlcall.

dMULTICALL;

متعدد المكالمات
قم بإجراء رد اتصال خفيف الوزن. راجع "عمليات الاسترجاعات خفيفة الوزن" في perlcall.

متعدد؛

POP_MULTICALL
قوس إغلاق لرد اتصال خفيف الوزن. راجع "عمليات الاسترجاعات خفيفة الوزن" في
بيرلكول.

POP_MULTICALL;

PUSH_MULTICALL
شريحة فتح لرد اتصال خفيف الوزن. راجع "عمليات الاسترجاعات خفيفة الوزن" في
بيرلكول.

PUSH_MULTICALL;

رقمية وظائف


grok_bin
يحول سلسلة تمثل رقمًا ثنائيًا إلى نموذج رقمي.

عند الدخول بداية * لين إعطاء السلسلة للمسح، * الأعلام يعطي إشارات التحويل،
نتيجة يجب أن يكون NULL أو مؤشر إلى NV. يتوقف المسح عند نهاية
السلسلة، أو الحرف الأول غير صالح. ما لم يتم تعيين "PERL_SCAN_SILENT_ILLDIGIT".
in * الأعلام، فإن مواجهة حرف غير صالح سيؤدي أيضًا إلى ظهور تحذير. على
عائد أعلى * لين تم ضبطه على طول السلسلة الممسوحة ضوئيًا، و * الأعلام يعطي الإخراج
الأعلام.

إذا كانت القيمة <= "UV_MAX" فسيتم إرجاعها كـ UV، وتكون علامات الإخراج واضحة،
وليس هو مكتوب لشيء *نتيجة. إذا كانت القيمة > UV_MAX ترجع "grok_bin".
UV_MAX، يقوم بتعيين "PERL_SCAN_GREATER_THAN_UV_MAX" في إشارات الإخراج، ويكتب
قيمة ل *نتيجة (أو يتم تجاهل القيمة إذا نتيجة باطل).

يمكن أن يكون الرقم الثنائي مسبوقًا بشكل اختياري بـ "0b" أو "b" إلا إذا كان
تم تعيين "PERL_SCAN_DISALLOW_PREFIX". * الأعلام عند الدخول. لو
تم تعيين "PERL_SCAN_ALLOW_UNDERSCORES". * الأعلام ثم قد يستخدم الرقم الثنائي "_"
أحرف لفصل الأرقام.

الأشعة فوق البنفسجية grok_bin(const char* start, STRLEN* len_p,
أعلام I32*، NV *النتيجة)

grok_hex
يحول سلسلة تمثل رقمًا سداسيًا عشريًا إلى نموذج رقمي.

عند الدخول بداية *len_p إعطاء السلسلة للمسح، * الأعلام يعطي إشارات التحويل،
نتيجة يجب أن يكون NULL أو مؤشر إلى NV. يتوقف المسح عند نهاية
السلسلة، أو الحرف الأول غير صالح. ما لم يتم تعيين "PERL_SCAN_SILENT_ILLDIGIT".
in * الأعلام، فإن مواجهة حرف غير صالح سيؤدي أيضًا إلى ظهور تحذير. على
عائد أعلى * لين تم ضبطه على طول السلسلة الممسوحة ضوئيًا، و * الأعلام يعطي الإخراج
الأعلام.

إذا كانت القيمة <= UV_MAX، فسيتم إرجاعها كـ UV، وتكون علامات الإخراج واضحة، و
لا شيء مكتوب ل *نتيجة. إذا كانت القيمة > UV_MAX فترجع "grok_hex".
UV_MAX، يقوم بتعيين "PERL_SCAN_GREATER_THAN_UV_MAX" في إشارات الإخراج، ويكتب
قيمة ل *نتيجة (أو يتم تجاهل القيمة إذا نتيجة باطل).

يمكن أن يكون الرقم السداسي مسبوقًا اختياريًا بـ "0x" أو "x" ما لم يكن
تم تعيين "PERL_SCAN_DISALLOW_PREFIX". * الأعلام عند الدخول. لو
تم تعيين "PERL_SCAN_ALLOW_UNDERSCORES". * الأعلام ثم قد يستخدم الرقم السداسي "_"
أحرف لفصل الأرقام.

الأشعة فوق البنفسجية grok_hex(const char* start, STRLEN* len_p,
أعلام I32*، NV *النتيجة)

grok_infnan
مساعد ل grok_number()، يقبل طرقًا مختلفة لتهجئة كلمة "infinity" أو "not a
number"، وتقوم بإرجاع إحدى مجموعات العلامات التالية:

IS_NUMBER_INFINITE
IS_NUMBER_NAN
IS_NUMBER_INFINITE | IS_NUMBER_NEG
IS_NUMBER_NAN | IS_NUMBER_NEG
0

ربما |-ed مع IS_NUMBER_TRAILING.

إذا تم التعرف على ما لا نهاية أو ليس رقمًا، فسيشير *sp إلى بايت واحد
بعد نهاية السلسلة التي تم التعرف عليها. إذا فشل التعرف، يكون الصفر
عاد، ولن يتحرك *sp.

int grok_infnan(const char** sp, const char *send)

grok_number
مطابقة ل grok_number_flags() مع وضع الأعلام على الصفر.

int grok_number(const char *pv, STRLEN len,
الأشعة فوق البنفسجية * القيمة ص)

grok_number_flags
التعرف على (أو لا) رقم. يتم إرجاع نوع الرقم (0 إذا
غير معروف)، وإلا فهو مزيج بت أو أحمر من IS_NUMBER_IN_UV،
IS_NUMBER_GREATER_THAN_UV_MAX، IS_NUMBER_NOT_INT، IS_NUMBER_NEG،
IS_NUMBER_INFINITY، IS_NUMBER_NAN (محدد في perl.h).

إذا كان من الممكن احتواء قيمة الرقم في الأشعة فوق البنفسجية، فسيتم إرجاعها في *valuep
سيتم تعيين IS_NUMBER_IN_UV للإشارة إلى أن *valuep صالحة، IS_NUMBER_IN_UV
لن يتم تعيينها أبدًا إلا إذا كانت *valuep صالحة، ولكن ربما تم تعيين *valuep لها
أثناء المعالجة على الرغم من عدم تعيين IS_NUMBER_IN_UV عند الإرجاع. إذا كانت القيمة هي
NULL، سيتم تعيين IS_NUMBER_IN_UV لنفس الحالات عندما تكون valuep غير NULL،
ولكن لن يحدث أي تعيين فعلي (أو SEGV).

سيتم تعيين IS_NUMBER_NOT_INT على IS_NUMBER_IN_UV في حالة رؤية الكسور العشرية اللاحقة
(في هذه الحالة *valuep يعطي القيمة الحقيقية مقطوعة إلى عدد صحيح)، و
IS_NUMBER_NEG إذا كان الرقم سالبًا (وفي هذه الحالة، تحمل القيمة *valuep القيمة المطلقة
قيمة). لم يتم تعيين IS_NUMBER_IN_UV إذا تم استخدام التدوين e أو كان الرقم أكبر
من الأشعة فوق البنفسجية.

تسمح "العلامات" فقط بـ "PERL_SCAN_TRAILING"، الذي يسمح بتتبع أرقام غير رقمية
النص على خلاف ذلك ناجحة جروك، مع تحديد "IS_NUMBER_TRAILING" على النتيجة.

int grok_number_flags(const char *pv, STRLEN len,
الأشعة فوق البنفسجية * القيمة، أعلام U32)

grok_numeric_radix
قم بالمسح الضوئي والتخطي بحثًا عن فاصل عشري رقمي (الجذر).

bool grok_numeric_radix(const char **sp,
حرف ثابت *إرسال)

grok_oct
يحول سلسلة تمثل رقمًا ثمانيًا إلى شكل رقمي.

عند الدخول بداية * لين إعطاء السلسلة للمسح، * الأعلام يعطي إشارات التحويل،
نتيجة يجب أن يكون NULL أو مؤشر إلى NV. يتوقف المسح عند نهاية
السلسلة، أو الحرف الأول غير صالح. ما لم يتم تعيين "PERL_SCAN_SILENT_ILLDIGIT".
in * الأعلام، فإن مواجهة الرقم 8 أو 9 ستؤدي أيضًا إلى ظهور تحذير. عند العودة * لين is
لتعيين طول السلسلة الممسوحة ضوئيًا، و * الأعلام يعطي أعلام الإخراج.

إذا كانت القيمة <= UV_MAX، فسيتم إرجاعها كـ UV، وتكون علامات الإخراج واضحة، و
لا شيء مكتوب ل *نتيجة. إذا كانت القيمة > UV_MAX ترجع "grok_oct".
UV_MAX، يقوم بتعيين "PERL_SCAN_GREATER_THAN_UV_MAX" في إشارات الإخراج، ويكتب
قيمة ل *نتيجة (أو يتم تجاهل القيمة إذا نتيجة باطل).

إذا تم تعيين "PERL_SCAN_ALLOW_UNDERSCORES". * الأعلام ثم يمكن استخدام الرقم الثماني
أحرف '_' لفصل الأرقام.

الأشعة فوق البنفسجية grok_oct(const char* start, STRLEN* len_p,
أعلام I32*، NV *النتيجة)

com.isinfnan
بيرل_isinfnan() هي دالة مساعدة ترجع صحيحًا إذا كانت وسيطة NV كذلك
ما لا نهاية أو NaN، وإلا فإن هذا خطأ. للاختبار بمزيد من التفاصيل، استخدم بيرل_isinf()
بيرل_يسنان().

وهذا أيضًا هو العكس المنطقي لـ بيرل_isfinite().

بول إيسنفانان (نيفادا نيفادا)

بيرل_سيجنبيت
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

قم بإرجاع عدد صحيح غير صفري إذا تم تعيين بت الإشارة على NV، و0 إذا لم يكن كذلك.

إذا اكتشف التكوين أن هذا النظام لديه ملف علامة () من شأنها أن تعمل مع NVs لدينا، ثم
نحن نستخدمه فقط عبر #define في perl.h. وإلا تراجع عن هذا
تطبيق. الاستخدام الرئيسي لهذه الوظيفة هو التقاط -0.0.

تكوين الملاحظات: تسمى هذه الوظيفة "Perl_signbit" بدلاً من الوظيفة العادية
"signbit" لأنه من السهل تخيل وجود نظام به علامة () وظيفة أو
الماكرو الذي لا يعمل مع اختيارنا المحدد لـ NVs. لا ينبغي لنا ذلك
ما عليك سوى إعادة تعريف Signbit كـ Perl_signbit وتوقع أن يتم ذلك في رؤوس النظام القياسية
كن سعيدا. أيضًا، هذه وظيفة بدون سياق (لا يوجد pTHX_) لأن بيرل_سيجنبيت()
عادةً ما يتم إعادة تعريفه في Perl.h باعتباره استدعاء ماكرو بسيط للنظام علامة ().
يجب على المستخدمين الاتصال دائمًا بيرل_سيجنبيت().

إنت بيرل_سيجنبيت(نف و)

scan_bin
للتوافق مع الإصدارات السابقة. استخدم "grok_bin" بدلاً من ذلك.

NV scan_bin(const char* start, STRLEN len,
سترلين* ريتلين)

scan_hex
للتوافق مع الإصدارات السابقة. استخدم "grok_hex" بدلاً من ذلك.

NV scan_hex(const char* start, STRLEN len,
سترلين* ريتلين)

scan_oct
للتوافق مع الإصدارات السابقة. استخدم "grok_oct" بدلاً من ذلك.

NV scan_oct(const char* start, STRLEN len,
سترلين* ريتلين)

مهمل الى الوراء التوافق وظائف


تم إهمال بعض هذه أيضًا. يمكنك استبعاد هذه من لغة Perl المترجمة الخاصة بك بواسطة
إضافة هذا الخيار إلى التكوين: "-Accflags='-DNO_MATHOMS'"

custom_op_desc
قم بإرجاع وصف عملية مخصصة معينة. تم استخدام هذا مرة واحدة بواسطة OP_DESC
ماكرو، لكنه لم يعد كذلك: لقد تم الاحتفاظ به فقط من أجل التوافق، ولا ينبغي
يستخدم.

const char * custom_op_desc(const OP *o)

custom_op_name
قم بإرجاع الاسم لعملية مخصصة معينة. تم استخدام هذا مرة واحدة بواسطة الماكرو OP_NAME،
ولكنه لم يعد كذلك: فقد تم الاحتفاظ به فقط من أجل التوافق، ولا ينبغي استخدامه.

const char * custom_op_name(const OP *o)

gv_fetchmethod
راجع "gv_fetchmethod_autoload".

GV* gv_fetchmethod(HV* stash، const char* name)

is_utf8_char
إهمال! من المخطط إزالة هذه الوظيفة من إصدار مستقبلي لـ Perl.
لا تستخدمه للرمز الجديد ؛ إزالته من التعليمات البرمجية الموجودة.

يختبر ما إذا كان هناك عدد عشوائي من البايتات يبدأ بحرف UTF-8 صالح. ملحوظة
أن الحرف INVARIANT (أي ASCII على الأجهزة غير EBCDIC) هو UTF-8 صالح
شخصية. سيتم إرجاع العدد الفعلي للبايتات في حرف UTF-8 إذا
فهو صالح، وإلا 0.

تم إهمال هذه الوظيفة نظرًا لاحتمال حدوث إدخال غير صحيح
يسبب القراءة بعد نهاية المخزن المؤقت للإدخال. استخدم "isUTF8_CHAR" بدلاً من ذلك.

STRLEN is_utf8_char(const U8 *s)

is_utf8_char_buf
وهذا مطابق للماكرو "isUTF8_CHAR".

STRLEN is_utf8_char_buf(const U8 *buf,
ثابت U8 *buf_end)

pack_cat
تنفيذ المحرك علية() وظيفة بيرل. ملاحظة: المعلمات next_in_list و
لا يتم استخدام الأعلام. لا ينبغي استخدام هذه المكالمة؛ استخدم قائمة الحزم بدلاً من ذلك.

باطلة pack_cat(SV *cat, const char *pat,
const char *patend، SV **beglist،
SV **endlist، SV ***next_in_list،
أعلام U32)

Pad_compname_type
يبحث عن نوع المتغير المعجمي في الموضع po في الوقت الحاضر-
لوحة التجميع. إذا تم كتابة المتغير، خبأ الفئة التي ينتمي إليها
تم إرجاعها. إذا لم يكن الأمر كذلك، فسيتم إرجاع "NULL".

HV * Pad_compname_type(PADOFFSET بو)

sv_2pvbyte_nolen
قم بإرجاع مؤشر إلى التمثيل المشفر بالبايت لـ SV. قد يسبب SV
ليتم تخفيض تصنيفها من UTF-8 كأثر جانبي.

يتم الوصول إليه عادةً عبر الماكرو "SvPVbyte_nolen".

شار* sv_2pvbyte_nolen(SV* sv)

sv_2pvutf8_nolen
قم بإرجاع مؤشر إلى تمثيل UTF-8 لـ SV. قد يسبب SV
للترقية إلى UTF-8 كأثر جانبي.

يتم الوصول إليه عادةً عبر الماكرو "SvPVutf8_nolen".

شار* sv_2pvutf8_nolen(SV* sv)

sv_2pv_nolen
مثل "sv_2pv()"، ولكنها لا تُرجع الطول أيضًا. يجب عليك عادة استخدام
مجمع الماكرو "SvPV_nolen(sv)" بدلاً من ذلك.

شار* sv_2pv_nolen(SV* sv)

sv_catpvn_mg
مثل "sv_catpvn"، ولكنه يتعامل أيضًا مع سحر "set".

باطلة sv_catpvn_mg(SV *sv, const char *ptr,
سترلين لين)

sv_catsv_mg
مثل "sv_catsv"، ولكنه يتعامل أيضًا مع سحر "set".

باطلة sv_catsv_mg(SV *dsv، SV *ssv)

sv_force_normal
التراجع عن أنواع مختلفة من التزييف على SV: إذا كانت PV عبارة عن سلسلة مشتركة، فقم بإجراء
نسخة خاصة؛ إذا كنا حكما، توقف عن الحكم؛ إذا كنا عالميًا، فقم بالرجوع إلى xpvmg.
راجع أيضًا "sv_force_normal_flags".

باطلة sv_force_normal(SV *sv)

sv_iv تطبيق خاص للماكرو "SvIVx" للمترجمين الذين لا يمكنهم التعامل معه
تعبيرات الماكرو المعقدة. استخدم الماكرو دائمًا بدلاً من ذلك.

IV sv_iv(SV* sv)

sv_nolocking
الروتين الوهمي الذي "يقفل" SV في حالة عدم وجود وحدة قفل. موجود
لتجنب اختبار مؤشر دالة NULL ولأنه من المحتمل أن يحذر
تحت مستوى معين من الصرامة.

"يحل محله". sv_nosharing().

باطلة sv_nolocking(SV *sv)

sv_nonlocking
الروتين الوهمي الذي "يفتح" SV في حالة عدم وجود وحدة قفل.
موجود لتجنب اختبار مؤشر دالة NULL ولأنه من المحتمل أن يكون ذلك
تحذير تحت مستوى معين من الصرامة.

"يحل محله". sv_nosharing().

باطلة sv_nonlocking(SV *sv)

sv_nv تطبيق خاص للماكرو "SvNVx" للمترجمين الذين لا يمكنهم التعامل معه
تعبيرات الماكرو المعقدة. استخدم الماكرو دائمًا بدلاً من ذلك.

نيفادا sv_nv(SV* sv)

sv_pv استخدم الماكرو "SvPV_nolen" بدلاً من ذلك

شار* sv_pv(SV *sv)

sv_pvbyte
استخدم "SvPVbyte_nolen" بدلاً من ذلك.

شار* sv_pvbyte(SV *sv)

sv_pvbyten
تطبيق خاص للماكرو "SvPVbyte" للمترجمين الذين لا يمكنهم التعامل معه
مع تعبيرات الماكرو المعقدة. استخدم الماكرو دائمًا بدلاً من ذلك.

شار* sv_pvbyten(SV *sv, STRLEN *lp)

sv_pvn تطبيق خاص للماكرو "SvPV" للمترجمين الذين لا يمكنهم التعامل معه
تعبيرات الماكرو المعقدة. استخدم الماكرو دائمًا بدلاً من ذلك.

شار* sv_pvn(SV *sv, STRLEN *lp)

sv_pvutf8
استخدم الماكرو "SvPVutf8_nolen" بدلاً من ذلك

شار* sv_pvutf8(SV *sv)

sv_pvutf8n
تطبيق خاص للماكرو "SvPVutf8" للمترجمين الذين لا يمكنهم التعامل معه
مع تعبيرات الماكرو المعقدة. استخدم الماكرو دائمًا بدلاً من ذلك.

شار* sv_pvutf8n(SV *sv, STRLEN *lp)

sv_taint
تلوث SV. استخدم "SvTAINTED_on" بدلاً من ذلك.

باطلة sv_taint(SV* sv)

sv_unref
يقوم بإلغاء تعيين حالة RV الخاصة بـ SV، ويقلل العدد المرجعي لأي شيء كان
يتم الرجوع إليها بواسطة RV. يمكن تقريبًا اعتبار هذا بمثابة انعكاس لـ
"newSVrv". هذا هو "sv_unref_flags" مع كون "العلامة" صفرًا. راجع "SvROK_off".

باطلة sv_unref(SV* sv)

sv_usepvn
يخبر SV باستخدام "ptr" للعثور على قيمة السلسلة الخاصة به. يتم تنفيذها عن طريق الدعوة
"sv_usepvn_flags" مع "أعلام" بقيمة 0، وبالتالي لا يتعامل مع سحر "set". يرى
"sv_usepvn_flags".

باطلة sv_usepvn(SV* sv, char* ptr, STRLEN len)

sv_usepvn_mg
مثل "sv_usepvn"، ولكنه يتعامل أيضًا مع سحر "set".

باطلة sv_usepvn_mg(SV *sv, char *ptr, STRLEN len)

sv_uv تطبيق خاص للماكرو "SvUVx" للمترجمين الذين لا يمكنهم التعامل معه
تعبيرات الماكرو المعقدة. استخدم الماكرو دائمًا بدلاً من ذلك.

الأشعة فوق البنفسجية sv_uv(SV* sv)

unpack_str
تنفيذ المحرك أفرغ() وظيفة بيرل. ملاحظة: المعلمات strbeg، new_s
وocnt لا تستخدم. لا ينبغي استخدام هذا الاستدعاء، استخدم unpackstring بدلاً من ذلك.

I32 unpack_str(const char *pat, const char *patend,
const char *s، const char *strbeg،
const char *strend، char **new_s،
I32 ocnt، أعلام U32)

utf8_to_uvchr
إهمال! من المخطط إزالة هذه الوظيفة من إصدار مستقبلي لـ Perl.
لا تستخدمه للرمز الجديد ؛ إزالته من التعليمات البرمجية الموجودة.

إرجاع نقطة الكود الأصلية للحرف الأول في السلسلة "s" وهي
من المفترض أن يكون بتشفير UTF-8؛ سيتم تعيين "retlen" على طول الملف بالبايت
تلك الشخصية.

تم اكتشاف بعض تشوهات UTF-8، وليس كلها، وفي الواقع، تم اكتشاف بعض التشوهات
input يمكن أن يتسبب في قراءة ما بعد نهاية المخزن المؤقت للإدخال، وهذا هو السبب
تم إهمال الوظيفة. استخدم "utf8_to_uvchr_buf" بدلاً من ذلك.

إذا كان الحرف "s" يشير إلى أحد التشوهات المكتشفة، وتم تمكين تحذيرات UTF8،
يتم إرجاع الصفر ويتم تعيين *retlen (إذا لم تكن "retlen" فارغة) على -1. إذا كان هؤلاء
تم إيقاف التحذيرات، القيمة المحسوبة إذا كانت محددة جيدًا (أو استبدال Unicode
CHARACTER، إذا لم يكن كذلك) يتم إرجاعه بصمت، ويتم تعيين *retlen (إذا لم يتم تعيين "retlen"
NULL) بحيث يكون ("s" + *retlen) هو الموضع المحتمل التالي في "s" الذي يمكن ذلك
تبدأ شخصية غير مشوهة. راجع "utf8n_to_uvchr" للحصول على تفاصيل حول متى
تم إرجاع الحرف البديل.

الأشعة فوق البنفسجية utf8_to_uvchr(const U8 *s, STRLEN *retlen)

utf8_to_uvuni
إهمال! من المخطط إزالة هذه الوظيفة من إصدار مستقبلي لـ Perl.
لا تستخدمه للرمز الجديد ؛ إزالته من التعليمات البرمجية الموجودة.

إرجاع نقطة رمز Unicode للحرف الأول في السلسلة "s" وهي
من المفترض أن يكون بتشفير UTF-8؛ سيتم تعيين "retlen" على طول الملف بالبايت
تلك الشخصية.

تم اكتشاف بعض تشوهات UTF-8، وليس كلها، وفي الواقع، تم اكتشاف بعض التشوهات
input قد يتسبب في قراءة ما بعد نهاية المخزن المؤقت للإدخال، وهذا أحد الأسباب
لماذا تم إهمال هذه الوظيفة. والآخر هو أن فقط في محدودة للغاية
الظروف التي يجب أن تكون فيها نقطة Unicode مقابل نقطة الكود الأصلية ذات أهمية
أنت. راجع "utf8_to_uvuni_buf" لمعرفة البدائل.

إذا كان الحرف "s" يشير إلى أحد التشوهات المكتشفة، وتم تمكين تحذيرات UTF8،
يتم إرجاع الصفر ويتم تعيين *retlen (إذا لم يشير "retlen" إلى NULL) إلى -1. لو
تم إيقاف هذه التحذيرات، والقيمة المحسوبة إذا كانت محددة جيدًا (أو Unicode
يتم إرجاع الحرف البديل، إذا لم يكن كذلك) بصمت، ويتم تعيين *retlen (إذا
"retlen" ليس NULL) لذا فإن ("s" + *retlen) هو الموضع المحتمل التالي في "s"
يمكن أن تبدأ شخصية غير مشوهة. راجع "utf8n_to_uvchr" للحصول على تفاصيل حول
عندما يتم إرجاع الحرف البديل.

الأشعة فوق البنفسجية utf8_to_uvuni(const U8 *s, STRLEN *retlen)

أوبتري إنشاء


newASSIGNOP
يبني ويتحقق ويعيد مهمة المهمة. اليسار حق توريد
معلمات المهمة؛ تستهلكهم هذه الوظيفة ويصبحون جزءًا منها
من شجرة المرجع المشيدة.

If النوع هو "OP_ANDASSIGN"، أو "OP_ORASSIGN"، أو "OP_DORASSIGN"، ثم خيار مناسب
يتم إنشاء optree المشروط. لو النوع هو رمز التشغيل لمشغل ثنائي،
مثل "OP_BIT_OR"، ثم يتم إنشاء عملية تنفذ العملية الثنائية
ويعين النتيجة إلى الوسيطة اليسرى. وفي كلتا الحالتين، إذا النوع غير الصفر
then الأعلام ليس له تأثير.

If النوع تساوي صفرًا، ثم يتم إنشاء تخصيص عددي أو قائمة بسيطة. أيّ
يتم تحديد نوع المهمة تلقائيًا. الأعلام يعطي البتات الثمانية
من "op_flags"، باستثناء أنه سيتم تعيين "OPf_KIDS" تلقائيًا، ونقله لأعلى
ثمانية بتات، البتات الثمانية لـ "op_private"، باستثناء البتة ذات القيمة 1 أو 2
يتم ضبطه تلقائيًا كما هو مطلوب.

OP * newASSIGNOP(أعلام I32، OP *left، I32 opttype،
أوب * يمين)

newBINOP
ينشئ ويفحص ويعيد عملية من أي نوع ثنائي. نوع هو كود التشغيل.
الأعلام يعطي البتات الثمانية لـ "op_flags"، باستثناء أنه سيتم تعيين "OPf_KIDS".
تلقائيًا، وتم إزاحة ثمانية بتات لأعلى، الثمانية بتات من "op_private"، باستثناء
أن البت ذو القيمة 1 أو 2 يتم ضبطه تلقائيًا على النحو المطلوب. أول آخر
توفير ما يصل إلى عمليتين ليكونا أبناء مباشرين للعملية الثنائية؛ يتم استهلاكها
بهذه الوظيفة وتصبح جزءًا من شجرة العمليات التي تم إنشاؤها.

OP * newBINOP (نوع I32، أعلام I32، OP * أولاً،
أو*الأخير)

newCONDOP
ينشئ المرجع المرجعي التعبير الشرطي ("cond_expr") ويتحقق منه ويعيده. الأعلام
يعطي البتات الثمانية لـ "op_flags"، باستثناء أنه سيتم تعيين "OPf_KIDS".
تلقائيًا، وتم إزاحة ثمانية بتات لأعلى، الثمانية بتات من "op_private"، باستثناء
أن البت ذو القيمة 1 يتم ضبطه تلقائيًا. أول يزود التعبير
الاختيار بين الفرعين، و com.trueop falseop توريد الفروع.
يتم استهلاكهم بواسطة هذه الوظيفة ويصبحون جزءًا من شجرة العمليات التي تم إنشاؤها.

OP * newCONDOP(I32 flags, OP *first, OP *trueop,
أوب * كاذبة)

newDEFSVOP
ينشئ ويعيد عملية للوصول إلى $_، إما كمتغير معجمي (if
تم الإعلان عنه كـ "my $_") في النطاق الحالي، أو النطاق العالمي $_.

أوب * نيوديفسفوب ()

newFOROP
ينشئ ويفحص ويعيد شجرة العمليات التي تعبر عن حلقة "foreach" (التكرار
من خلال قائمة القيم). هذه حلقة ثقيلة الوزن، مع هيكل يسمح بذلك
الخروج من الحلقة بواسطة "الأخير" وما شابه.

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

الأعلام يعطي البتات الثمانية من "op_flags" لعملية "leaveloop" ويتم إزاحتها لأعلى
ثمانية بتات، البتات الثمانية من "op_private" لعملية "leaveloop"، باستثناء ذلك (في
في كلتا الحالتين) سيتم تعيين بعض البتات تلقائيًا.

OP * newFOROP (أعلام I32، OP *sv، OP *expr، OP *block،
البروتوكول الاختياري * تابع)

newGIVENOP
ينشئ ويفحص ويعيد شجرة العمليات التي تعبر عن كتلة "معطى". كوند
يوفر التعبير الذي سيتم تعيينه محليًا لمتغير معجمي، و
منع يزود جسد البناء "المعطى" ؛ لقد استهلكهم هذا
تعمل وتصبح جزءًا من شجرة العمليات التي تم إنشاؤها. defsv_off هو إزاحة الوسادة
من المتغير المعجمي العددي الذي سوف يتأثر. إذا كانت 0، فإن $_ العالمي
وسوف تستخدم.

OP * newGIVENOP(OP *cond، OP *block،
بادوفسيت defsv_off)

newGVOP ينشئ ويفحص ويعيد عملية من أي نوع تتضمن عنصرًا مضمنًا
إشارة إلى GV. نوع هو كود التشغيل. الأعلام يعطي البتات الثمانية من "op_flags".
gv يحدد الفيديو العام الذي يجب أن تشير إليه العملية؛ استدعاء هذه الوظيفة لا
نقل ملكية أي إشارة إليها.

OP * newGVOP (نوع I32، أعلام I32، GV *gv)

newLISTOP
ينشئ ويفحص ويعيد عملية من أي نوع قائمة. نوع هو كود التشغيل.
الأعلام يعطي البتات الثمانية لـ "op_flags"، باستثناء أنه سيتم تعيين "OPf_KIDS".
تلقائيا إذا لزم الأمر. أول آخر توريد ما يصل إلى عمليتين لتكون مباشرة
أبناء القائمة؛ يتم استهلاكهم بواسطة هذه الوظيفة ويصبحون جزءًا من
شجرة المرجع المبنية.

بالنسبة لمعظم مشغلي القائمة، تتوقع وظيفة التحقق وجود جميع العمليات الصغيرة
بالفعل، لذا فإن استدعاء "newLISTOP(OP_JOIN, ...)" (على سبيل المثال) غير مناسب. ما لك
ما أريد القيام به في هذه الحالة هو إنشاء عملية من النوع OP_LIST، وإلحاق المزيد من الأطفال بها
عليه، ثم اتصل بـ "op_convert_list". راجع "op_convert_list" لمزيد من المعلومات.

OP * newLISTOP (نوع I32، أعلام I32، OP * أولًا،
أو*الأخير)

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

OP * newLOGOP (نوع I32، أعلام I32، OP * أولًا،
أو*أخرى)

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

OP * newLOOPEX (نوع I32، OP *label)

newLOOPOP
ينشئ ويفحص ويعيد شجرة العمليات التي تعبر عن حلقة. هذه ليست سوى حلقة
في تدفق التحكم من خلال شجرة المرجع؛ ليس لديها حلقة الوزن الثقيل
هيكل يسمح بالخروج من الحلقة بواسطة "الأخير" وما شابه. الأعلام يعطي
ثمانية بتات من "op_flags" لعملية المستوى الأعلى، باستثناء أنه سيتم تعيين بعض البتات
تلقائيا كما هو مطلوب. على سبيل المثال يوفر حلقة التحكم في التعبير
التكرار، و منع يزود جسم الحلقة. لقد استهلكهم هذا
تعمل وتصبح جزءًا من شجرة العمليات التي تم إنشاؤها. قابل للتصحيح حاليا
غير مستخدم ويجب أن يكون دائمًا 1.

OP * newLOOPOP (علامات I32، I32 قابلة للتصحيح، OP *expr،
OP * كتلة)

newMETHOP
ينشئ ويتحقق ويعيد عملية من نوع الطريقة مع تقييم اسم الطريقة
في وقت التشغيل. نوع هو كود التشغيل. الأعلام يعطي البتات الثمانية من "op_flags"، باستثناء
سيتم تعيين "OPf_KIDS" تلقائيًا، وبعد إزاحته بمقدار ثمانية بتات، تصبح الثمانية
بتات من "op_private"، باستثناء أنه يتم تعيين البتات ذات القيمة 1 تلقائيًا.
dynamic_meth يوفر عملية تقييم اسم الطريقة؛ يتم استهلاكه بهذا
تعمل وتصبح جزءًا من شجرة العمليات التي تم إنشاؤها. الأنماط المدعومة:
OP_METHOD.

OP * newMETHOP (نوع I32، أعلام I32، OP * أولاً)

newMETHOP_named
ينشئ ويتحقق ويعيد عملية من نوع الطريقة باسم طريقة ثابتة.
نوع هو كود التشغيل. الأعلام يعطي البتات الثمانية من "op_flags"، ويتم إزاحتها لأعلى
ثماني بتات، البتات الثمانية لـ "op_private". const_meth يوفر طريقة ثابتة
اسم؛ يجب أن تكون سلسلة COW مشتركة. أنواع الخيارات المدعومة: OP_METHOD_NAMED.

OP * newMETHOP_named (نوع I32، أعلام I32،
إس في *const_meth)

newNULLLIST
ينشئ ويتحقق ويعيد عملية "كعب روتين" جديدة، والتي تمثل قائمة فارغة
التعبير.

أب * نيونولليست ()

newOP ينشئ ويفحص ويعيد عملية من أي نوع أساسي (أي نوع لا يحتوي على أي نوع إضافي
مجالات). نوع هو كود التشغيل. الأعلام يعطي البتات الثمانية من "op_flags"، و،
تم إزاحتها لأعلى بمقدار ثماني بتات، وهي البتات الثمانية لـ "op_private".

OP * newOP (نوع I32، أعلام I32)

newPADOP
ينشئ ويفحص ويعيد عملية من أي نوع تتضمن إشارة إلى ملف
عنصر الوسادة. نوع هو كود التشغيل. الأعلام يعطي البتات الثمانية من "op_flags". أ
يتم تخصيص فتحة اللوحة تلقائيًا، ويتم ملؤها sv; تأخذ هذه الوظيفة
ملكية إشارة واحدة إليها.

هذه الوظيفة موجودة فقط إذا تم تجميع لغة Perl لاستخدام ithreads.

OP * newPADOP (نوع I32، أعلام I32، SV *sv)

newPMOP ينشئ ويفحص ويعيد عملية من أي نوع مطابق للنمط. نوع هل
كود التشغيل. الأعلام يعطي البتات الثمانية من "op_flags" ويتم إزاحتها لأعلى بمقدار ثماني بتات
ثمانية بتات من "op_private".

OP * newPMOP (نوع I32، أعلام I32)

newPVOP ينشئ ويفحص ويعيد عملية من أي نوع تتضمن عنصرًا مضمنًا
مؤشر المستوى C (PV). نوع هو كود التشغيل. الأعلام يعطي البتات الثمانية من
"op_flags". pv يوفر مؤشر المستوى C، والذي يجب تخصيصه باستخدام
"PerlMemShared_malloc"; سيتم تحرير الذاكرة عند تدمير المرجع.

OP * newPVOP (نوع I32، أعلام I32، char *pv)

newRANGE
ينشئ ويعيد عملية "نطاق" مع عمليات "قلب" و"تخبط" تابعة.
الأعلام يعطي البتات الثمانية من "op_flags" لعملية "flip" ويتم إزاحتها لأعلى بمقدار ثمانية
البتات الثمانية من "op_private" لكل من عمليتي "flip" و"range"، باستثناء
أن البت ذو القيمة 1 يتم ضبطه تلقائيًا. اليسار حق توريد
التعبيرات التي تتحكم في نقاط النهاية للنطاق؛ لقد استهلكهم هذا
تعمل وتصبح جزءًا من شجرة العمليات التي تم إنشاؤها.

OP * newRANGE (أعلام I32، OP * لليسار، OP * لليمين)

newSLICEOP
ينشئ ويتحقق ويعيد عملية "lslice" (شريحة القائمة). الأعلام يعطي
ثمانية بتات من "op_flags"، باستثناء أنه سيتم تعيين "OPf_KIDS" تلقائيًا، و،
تم إزاحة ما يصل إلى ثمانية بتات، الثمانية بتات من "op_private"، باستثناء تلك البتة
يتم تعيين القيمة 1 أو 2 تلقائيًا كما هو مطلوب. listval منخفض توريد
معلمات الشريحة يتم استهلاكهم بواسطة هذه الوظيفة ويصبحون جزءًا من
شجرة المرجع المبنية.

OP * newSLICEOP (أعلام I32، OP * منخفض،
OP * ليستفال)

newSTATEOP
يبني حالة المرجع (COP). عادةً ما تكون عملية تشغيل الحالة بمثابة عملية "الحالة التالية"، ولكنها ستفعل ذلك
تكون عملية "dbstate" إذا تم تمكين تصحيح الأخطاء للتعليمات البرمجية المترجمة حاليًا. الولاية
يتم تعبئة المرجع من "PL_curcop" (أو "PL_compiling"). لو ملصق غير فارغة، فإنه
يوفر اسم الملصق لإرفاقه بحالة المرجع؛ تأخذ هذه الوظيفة
ملكية الذاكرة المشار إليها من قبل ملصق، وسوف يحررها. الأعلام يعطي
ثمانية بتات من "op_flags" للحالة op.

If o إذا كانت فارغة، فسيتم إرجاع حالة المرجع. وإلا يتم دمج عملية الدولة مع o
في قائمة "lineseq" التي يتم إرجاعها. o تستهلكها هذه الوظيفة و
يصبح جزءًا من شجرة المرجع التي تم إرجاعها.

OP * newSTATEOP (أعلام I32، char *label، OP *o)

newSVOP ينشئ ويفحص ويعيد عملية من أي نوع تتضمن SV مضمنًا.
نوع هو كود التشغيل. الأعلام يعطي البتات الثمانية من "op_flags". sv يعطي SV ل
تضمين في المرجع؛ تأخذ هذه الوظيفة ملكية مرجع واحد لها.

OP * newSVOP (نوع I32، أعلام I32، SV *sv)

newUNOP ينشئ ويفحص ويعيد عملية من أي نوع أحادي. نوع هو كود التشغيل.
الأعلام يعطي البتات الثمانية لـ "op_flags"، باستثناء أنه سيتم تعيين "OPf_KIDS".
تلقائيًا إذا لزم الأمر، ويتم إزاحتها لأعلى بمقدار ثماني بتات، بحيث تصبح البتات الثمانية
"op_private"، باستثناء أنه يتم تعيين البت ذو القيمة 1 تلقائيًا. أول
يزود عملية اختيارية لتكون الابن المباشر للعملية الأحادية؛ يتم استهلاكه من قبل
هذه الوظيفة وتصبح جزءًا من شجرة العمليات التي تم إنشاؤها.

OP * newUNOP (نوع I32، أعلام I32، OP * أولاً)

newUNOP_AUX
يشبه "newUNOP"، ولكنه ينشئ بنية UNOP_AUX بدلاً من ذلك، باستخدام op_aux
تمت التهيئة إلى aux

OP* newUNOP_AUX(نوع I32، أعلام I32، OP* أولاً،
UNOP_AUX_item *aux)

جديدWHENOP
ينشئ ويفحص ويعيد شجرة العمليات التي تعبر عن كتلة "متى". كوند
يوفر تعبير الاختبار، و منع يوفر الكتلة التي سيتم تنفيذها
إذا تم تقييم الاختبار إلى صحيح؛ تستهلكهم هذه الوظيفة ويصبحون جزءًا منها
من شجرة المرجع المشيدة. كوند سيتم تفسيره بشكل DWIMically، في كثير من الأحيان على أنه
المقارنة مقابل $_، وقد تكون فارغة لإنشاء كتلة "افتراضية".

OP * newWHENOP(OP *cond، OP *block)

newWHILEOP
ينشئ ويفحص ويعيد شجرة العمليات التي تعبر عن حلقة "أثناء". هذا ال
حلقة ثقيلة الوزن، مع بنية تسمح بالخروج من الحلقة بواسطة "الأخير" و
مثل هذا.

حلقة عبارة عن عملية اختيارية "enterloop" تم إنشاؤها مسبقًا لاستخدامها في الحلقة ؛ اذا كانت
null، فسيتم إنشاء عملية مناسبة تلقائيًا. على سبيل المثال تزود ال
تعبير التحكم في الحلقة. منع يزود الجسم الرئيسي للحلقة، و تابع
يوفر بشكل اختياري كتلة "مستمرة" تعمل كالنصف الثاني من الجسم.
يتم استهلاك كل مدخلات optree هذه بواسطة هذه الوظيفة وتصبح جزءًا من
شجرة المرجع المبنية.

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

OP * newWHILEOP (علامات I32، I32 قابلة للتصحيح،
حلقة * حلقة، OP * expr، OP * كتلة،
OP * تابع، I32 has_my)

أوبتري تلاعب وظائف


com.alloccopstash
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

تتوفر هذه الوظيفة فقط ضمن الإصدارات المترابطة، وتقوم بتخصيص إدخال فيها
"PL_stashpad" للمخبأ الذي تم تمريره إليه.

PADoffSET alloccopstash(HV *hv)

block_end
يعالج الخروج من نطاق وقت الترجمة. الطابق الثاني هو فهرس savestack الذي تم إرجاعه بواسطة
"block_start"، و يليها هو جسم الكتلة. إرجاع الكتلة، ربما
تم التعديل.

OP * block_end (الطابق I32، OP *seq)

block_start
يعالج إدخال نطاق وقت الترجمة. يرتب لاستعادة التلميحات عند الخروج من الكتلة
ويتعامل أيضًا مع أرقام تسلسل اللوحة لجعل المتغيرات المعجمية ذات نطاق صحيح.
إرجاع فهرس savestack للاستخدام مع "block_end".

كثافة العمليات block_start(كثافة العمليات الكاملة)

ck_entersub_args_list
إجراء الإصلاح الافتراضي لجزء الوسائط من شجرة العمليات "entersub". هذا
يتكون من تطبيق سياق القائمة على كل من الوسيطات ops. هذا ال
المعالجة القياسية المستخدمة في مكالمة تم وضع علامة "&" عليها، أو استدعاء الأسلوب، أو المكالمة
من خلال مرجع روتيني فرعي، أو أي مكالمة أخرى حيث لا يمكن للمستدعى أن يكون
يتم تحديده في وقت الترجمة، أو مكالمة حيث لا يوجد لدى المستدعي نموذج أولي.

OP * ck_entersub_args_list(OP *entersubop)

ck_entersub_args_proto
إجراء إصلاح لجزء الوسائط من شجرة العمليات "entersub" استنادًا إلى ملف
النموذج الفرعي. يؤدي هذا إلى إجراء تعديلات مختلفة على الوسيطة ops، من
تطبيق السياق حتى إدراج عمليات "refgen"، والتحقق من الرقم و
أنواع الحجج النحوية، حسب توجيهات النموذج الأولي. هذا هو المعيار
العلاج المستخدم في مكالمة روتينية فرعية، غير مميزة بعلامة "&"، حيث يمكن أن يكون المتصل
تم تحديدها في وقت الترجمة ولها نموذج أولي.

بروتوسف يوفر النموذج الأولي للروتين الفرعي ليتم تطبيقه على المكالمة. قد يكون أ
العددية المحددة العادية، والتي سيتم استخدام قيمة السلسلة منها. بدلا من ذلك، ل
من أجل الملاءمة، قد يكون كائنًا روتينيًا فرعيًا ("CV*" تم تحويله إلى "SV*")
الذي لديه نموذج أولي. النموذج الأولي المقدم، بأي شكل من الأشكال، لا يحتاج
لمطابقة المستدعى الفعلي المشار إليه بواسطة شجرة العملية.

إذا كانت الوسيطة ops لا تتفق مع النموذج الأولي، على سبيل المثال من خلال وجود
عدد غير مقبول من الوسائط، يتم إرجاع شجرة عملية صالحة على أي حال. الخطأ
ينعكس في حالة المحلل اللغوي، مما يؤدي عادة إلى استثناء واحد في
المستوى الأعلى من التحليل الذي يغطي جميع أخطاء الترجمة التي حدثت. في
رسالة الخطأ، تتم الإشارة إلى المستدعي بالاسم المحدد بواسطة namegv
المعلمة.

OP * ck_entersub_args_proto(OP *entersubop،
الأصوات العالمية *namegv، SV *protosv)

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

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

إذا كانت الوسيطة ops لا تتفق مع النموذج الأولي، على سبيل المثال من خلال وجود
عدد غير مقبول من الوسائط، يتم إرجاع شجرة عملية صالحة على أي حال. الخطأ
ينعكس في حالة المحلل اللغوي، مما يؤدي عادة إلى استثناء واحد في
المستوى الأعلى من التحليل الذي يغطي جميع أخطاء الترجمة التي حدثت. في
رسالة الخطأ، تتم الإشارة إلى المستدعي بالاسم المحدد بواسطة namegv
المعلمة.

OP * ck_entersub_args_proto_or_list(OP *entersubop،
الأصوات العالمية *namegv،
إس في * بروتوسف)

cv_const_sv
إذا كانت "cv" عبارة عن فرعي ثابت مؤهل للتضمين، فسيتم إرجاع القيمة الثابتة
عاد من قبل الفرعية. وبخلاف ذلك، يتم إرجاع NULL.

يمكن إنشاء الاشتراكات الثابتة باستخدام "newCONSTSUB" أو كما هو موضح في "Constant
وظائف" في perlsub.

SV* cv_const_sv(const CV *const cv)

cv_get_call_checker
يسترد الوظيفة التي سيتم استخدامها لإصلاح مكالمة إلى cv. على وجه التحديد،
يتم تطبيق الوظيفة على شجرة العمليات "entersub" لاستدعاء روتين فرعي، ولم يتم وضع علامة عليها
باستخدام "&"، حيث يمكن تحديد المستدعى في وقت الترجمة باسم cv.

يتم إرجاع مؤشر وظيفة المستوى C *ckfun_p، ووسيطة SV لذلك
عاد في *ckobj_p. الغرض من الوظيفة هو أن يتم استدعاؤها بهذه الطريقة:

entersubop = (*ckfun_p)(aTHX_ entersubop, namegv, (*ckobj_p));

في هذه المكالمة، com.entersubop هو مؤشر إلى عملية "entersub" التي يمكن استبدالها
بواسطة وظيفة التحقق، و namegv عبارة عن رسالة رأي عامة توفر الاسم الذي يجب استخدامه
بواسطة وظيفة التحقق للإشارة إلى المستدعى من عملية "entersub" إذا احتاج إلى ذلك
تنبعث منها أي التشخيص. يُسمح بتطبيق وظيفة التحقق بشكل غير قياسي
الحالات، مثل استدعاء روتين فرعي مختلف أو استدعاء أسلوب.

بشكل افتراضي، تكون الوظيفة هي Perl_ck_entersub_args_proto_or_list، وSV
المعلمة هي cv بحد ذاتها. وهذا ينفذ معالجة النموذج الأولي القياسي. يمكن أن يكون
تم تغييره، لروتين فرعي معين، بواسطة "cv_set_call_checker".

باطلة cv_get_call_checker(CV *cv,
Perl_call_checker *ckfun_p،
SV ** ckobj_p)

cv_set_call_checker
النموذج الأصلي لـ "cv_set_call_checker_flags"، والذي يمرره
علامة "CALL_CHECKER_REQUIRE_GV" للتوافق مع الإصدارات السابقة.

باطلة cv_set_call_checker(CV *cv,
Perl_call_checker ckfun،
إس في *كوبج)

cv_set_call_checker_flags
يضبط الوظيفة التي سيتم استخدامها لإصلاح مكالمة cv. على وجه التحديد ،
يتم تطبيق الوظيفة على شجرة العمليات "entersub" لاستدعاء روتين فرعي، ولم يتم وضع علامة عليها
باستخدام "&"، حيث يمكن تحديد المستدعى في وقت الترجمة باسم cv.

يتم توفير مؤشر وظيفة المستوى C في com.ckfun، ووسيطة SV لذلك
الموردة في ckobj. يجب تعريف الوظيفة على النحو التالي:

STATIC OP * ckfun(pTHX_ OP *op, GV *namegv, SV *ckobj)

من المفترض أن يتم استدعاؤها على هذا النحو:

entersubop = ckfun(aTHX_ entersubop, namegv, ckobj);

في هذه المكالمة، com.entersubop هو مؤشر إلى عملية "entersub" التي يمكن استبدالها
بواسطة وظيفة التحقق، و namegv يوفر الاسم الذي يجب استخدامه بواسطة
تحقق من الوظيفة للإشارة إلى المستدعى من عملية "entersub" إذا كانت بحاجة إلى إصدار أي منها
التشخيص. يُسمح بتطبيق وظيفة التحقق بشكل غير قياسي
الحالات، مثل استدعاء روتين فرعي مختلف أو استدعاء أسلوب.

namegv قد لا تكون في الواقع GV. من أجل الكفاءة، قد يمرر بيرل سيرة ذاتية أو SV أخرى
بدلاً من. كل ما تم تمريره يمكن استخدامه كوسيطة أولى لـ "cv_name". أنت
يمكن إجبار Perl على تمرير GV عن طريق تضمين "CALL_CHECKER_REQUIRE_GV" في الأعلام.

يمكن استرداد الإعداد الحالي لسيرة ذاتية معينة عن طريق "cv_get_call_checker".

باطلة cv_set_call_checker_flags (
السيرة الذاتية * السيرة الذاتية، Perl_call_checker ckfun، SV * ckobj،
أعلام U32
)

قائمة الروابط
بالنظر إلى جذر شجرة Optree، قم بربط الشجرة بترتيب التنفيذ باستخدام "op_next"
المؤشرات وإرجاع العملية الأولى التي تم تنفيذها. إذا كان هذا قد تم بالفعل، فسوف يحدث
لن يتم إعادة بنائه، وسيتم إرجاع "o->op_next". إذا لم يكن "o->op_next" موجودًا بالفعل
جلس، o يجب أن يكون على الأقل "UNOP".

قائمة الروابط OP*(OP*o)

newCONSTUB
راجع "newCONSTSUB_flags".

السيرة الذاتية* newCONSTSUB(HV* stash، const char* name، SV* sv)

newCONSTSUB_flags
ينشئ مكافئًا فرعيًا ثابتًا لـ Perl "sub FOO () { 123 }" وهو مؤهل
للتضمين في وقت الترجمة.

حاليًا، القيمة الوحيدة المفيدة لـ "الإشارات" هي SVf_UTF8.

يأخذ الروتين الفرعي الذي تم إنشاؤه حديثًا ملكية مرجع إلى ما تم تمريره في SV.

يؤدي تمرير NULL لـ SV إلى إنشاء مكافئ فرعي ثابت لـ "sub BAR () {}"، والذي
لن يتم استدعاؤها إذا تم استخدامها كمدمرة، ولكنها ستمنع الحمل الزائد للمكالمة
إلى "التحميل التلقائي". (ومع ذلك، هذا النموذج غير مؤهل للتضمين في وقت الترجمة.)

السيرة الذاتية * newCONSTSUB_flags (HV * stash، const char * name،
STRLEN لين، أعلام U32، SV* sv)

newXS يستخدم بواسطة "xsubpp" لربط XSUBs كغواصات Perl. اسم الملف يجب أن تكون ثابتة
التخزين، كما يتم استخدامه مباشرة ملف السيرة الذاتية ()، دون عمل نسخة.

OpHAS_SIBLING
يعود صحيحًا إذا كان لديك أخ

منطقي OpHAS_SIBLING(OP *o)

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

باطلة OpLASTSIB_set(OP *o، OP *parent)

OpMAYBESIB_set
يتم تنفيذ "OpMORESIB_set" أو "OpLASTSIB_set" بشكل مشروط اعتمادًا على ما إذا كان sib
غير فارغة. للحصول على واجهة ذات مستوى أعلى، راجع "op_sibling_splice".

باطلة OpMAYBESIB_set(OP *o، OP *sib، OP *parent)

OpMORESIB_set
يضبط شقيق o على قيمة غير صفرية sib. انظر أيضًا "OpLASTSIB_set" و
"OpMAYBESIB_set". للحصول على واجهة ذات مستوى أعلى، راجع "op_sibling_splice".

باطلة OpMORESIB_set(OP *o, OP *sib)

OpSIBLING
إرجاع شقيق o، أو NULL إذا لم يكن هناك شقيق

OP* OpSIBLING(OP *o)

op_append_elem
إلحاق عنصر بقائمة العمليات المضمنة مباشرةً في عملية من نوع القائمة،
عودة القائمة المطولة. أول هو نوع القائمة المرجع، و آخر هو المرجع ل
إلحاق بالقائمة. النوع يحدد رمز التشغيل المقصود للقائمة. لو أول
ليست بالفعل قائمة من النوع الصحيح، وستتم ترقيتها إلى قائمة واحدة. أي كان
أول or آخر فارغة، ويتم إرجاع الآخر دون تغيير.

OP * op_append_elem(I32 opttype، OP *الأول، OP *الأخير)

op_append_list
قم بتسلسل قوائم العمليات المضمنة مباشرة ضمن عمليتين من نوع القائمة،
إرجاع القائمة المجمعة. أول آخر هي عمليات نوع القائمة للتسلسل.
النوع يحدد رمز التشغيل المقصود للقائمة. أي كان أول or آخر ليس
بالفعل قائمة من النوع الصحيح، سيتم ترقيتها إلى واحدة. أي كان أول
or آخر فارغة، ويتم إرجاع الآخر دون تغيير.

OP * op_append_list(I32 opttype، OP *الأول، OP *الأخير)

OP_CLASS
قم بإرجاع فئة OP المقدمة: أي من بنيات *OP التي يستخدمها.
بالنسبة للعمليات الأساسية، يقوم هذا حاليًا بإخراج المعلومات من PL_opargs، وهو ما لا يحدث
تعكس دائمًا النوع المستخدم بدقة. بالنسبة للعمليات المخصصة، يتم إرجاع النوع من
التسجيل، والأمر متروك للمسجل للتأكد من دقته. ال
ستكون القيمة التي تم إرجاعها إحدى ثوابت OA_* من op.h.

U32 OP_CLASS(OP *o)

op_contextualize
يطبق سياقًا نحويًا على شجرة العمليات التي تمثل تعبيرًا. o هو المرجع
شجرة، و سياق الكلام يجب أن يكون "G_SCALAR" أو "G_ARRAY" أو "G_VOID" لتحديد
سياق التطبيق. يتم إرجاع شجرة العملية المعدلة.

OP * op_contextualize(OP *o، سياق I32)

op_convert_list
المتحولين o إلى قائمة op إذا لم تكن موجودة بالفعل، ثم قم بتحويلها إلى
محدد نوع، استدعاء وظيفة التحقق الخاصة بها، وتخصيص الهدف إذا كان في حاجة إلى واحد،
والثوابت القابلة للطي.

عادةً ما يتم إنشاء عملية من نوع القائمة على طفل واحد في كل مرة عبر "newLISTOP"،
"op_prepend_elem" و"op_append_elem". ثم أخيرا يتم تمريره إلى
"op_convert_list" لجعله النوع الصحيح.

OP * op_convert_list (نوع I32، أعلام I32، OP *o)

OP_DESC قم بإرجاع وصف قصير لـ OP المقدم.

حرف ثابت * OP_DESC(OP *o)

op_free حرر المرجع. استخدم هذا فقط عندما لا تكون العملية مرتبطة بأي شجرة Optree.

باطلة op_free(OP *o)

op_linklist
هذه الوظيفة هي تنفيذ الماكرو "LINKLIST". لا ينبغي أن يكون
دعا مباشرة.

OP* op_linklist(OP *o)

op_lvalue
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

نشر سياق القيمة ("القابل للتعديل") إلى العملية وأبناءها. نوع
يمثل نوع السياق، ويعتمد تقريبًا على نوع العملية التي من شأنها أن تفعل ذلك
التعديل، على الرغم من أن "local()" يتم تمثيلها بواسطة OP_NULL، لأنها لا تحتوي على نوع تشغيل
من تلقاء نفسه (يتم الإشارة إليه بواسطة علامة على lvalue op).

تكتشف هذه الوظيفة الأشياء التي لا يمكن تعديلها، مثل "$x+1"، وتقوم بإنشائها
الأخطاء بالنسبة لهم. على سبيل المثال، قد يؤدي "$x+1 = 2" إلى استدعائه باستخدام عملية
من النوع OP_ADD ووسيطة "النوع" لـ OP_SASSIGN.

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

OP * op_lvalue (OP *o، نوع I32)

OP_NAME قم بإرجاع اسم OP المقدم. بالنسبة للعمليات الأساسية، يبحث هذا عن الاسم من ملف
op_type; للعمليات المخصصة من op_ppaddr.

حرف ثابت * OP_NAME(OP *o)

op_null تحييد العملية عندما لا تكون هناك حاجة إليها، ولكن لا تزال مرتبطة بها من جهة أخرى
العمليات.

باطلة op_null(OP *o)

op_parent
إرجاع الأصل OP لـ o، إذا كان لديه أحد الوالدين. إرجاع NULL خلاف ذلك. هذا
الوظيفة متاحة فقط على Perls المبنية باستخدام "-DPERL_OP_PARENT".

OP* op_parent(OP *o)

op_prepend_elem
قم بإضافة عنصر إلى قائمة العمليات الموجودة مباشرةً داخل عملية من نوع القائمة،
عودة القائمة المطولة. أول هو المرجع للإضافة إلى القائمة، و آخر
هو المرجع من نوع القائمة. النوع يحدد رمز التشغيل المقصود للقائمة. لو آخر
ليست بالفعل قائمة من النوع الصحيح، وستتم ترقيتها إلى قائمة واحدة. أي كان
أول or آخر فارغة، ويتم إرجاع الآخر دون تغيير.

OP * op_prepend_elem(I32 opttype، OP *الأول، OP *الأخير)

op_scope
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

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

OP * op_scope (OP * o)

op_sibling_splice
وظيفة عامة لتحرير بنية سلسلة موجودة من op_sibling
العقد. قياسا على مستوى بيرل لصق او جمع() وظيفة، يسمح لك بحذف
صفر أو أكثر من العقد المتسلسلة، واستبدالها بصفر أو أكثر من العقد المختلفة.
ينفذ التدبير المنزلي الضروري لـ op_first/op_last على العقدة الأصلية و
التلاعب op_sibling على الأطفال. سيتم وضع علامة على العقدة المحذوفة الأخيرة على أنها
باعتبارها العقدة الأخيرة عن طريق تحديث الحقل op_sibling/op_sibparent أو op_moresib كـ
المناسبة.

لاحظ أنه لا يتم التعامل مع op_next، ولا يتم تحرير العقد؛ هذا هو
مسؤولية المتصل. كما أنه لن ينشئ قائمة جديدة فارغة
قائمة الخ؛ استخدام وظائف ذات مستوى أعلى مثل op_append_elem() لذلك.

الأصل هو العقدة الأم لسلسلة الأخوة. قد يتم تمريره على أنه NULL إذا كان
لا يؤثر الربط على العملية الأولى أو الأخيرة في السلسلة.

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

del_count هو عدد العقد المراد حذفها. إذا كان الصفر، فلن يتم حذف أي عقد. إذا -1
أو أكبر من أو يساوي عدد الأطفال المتبقين، جميع الأطفال المتبقين
حذفه.

الإدراج هو الأول من سلسلة العقد التي سيتم إدراجها بدلاً من العقد. لو
NULL، لم يتم إدراج أي عقد.

يتم إرجاع رأس سلسلة العمليات المحذوفة، أو NULL إذا لم يتم حذف أي عمليات.

فمثلا:

العمل قبل وبعد العودة
------ ----- ----- -------

PP
لصق (P، A، 2، XYZ) | | قبل الميلاد
ABCD AXYZD

PP
لصق (P، NULL، 1، XY) | | أ
ABCD XYBCD

PP
لصق (P، NULL، 3، NULL) | | اي بي سي
اي بي سي دي د

PP
لصق (P، B، 0، XY) | | باطل
ABCD ABCYCD

للاطلاع على المعالجة المباشرة ذات المستوى الأدنى لـ "op_sibparent" و"op_moresib"، راجع
"OpMORESIB_set"، "OpLASTSIB_set"، "OpMAYBESIB_set".

OP* op_sibling_splice(OP *الوالد، OP *بدء،
int del_count، OP* إدراج)

OP_TYPE_IS
يُرجع صحيحًا إذا لم يكن OP المحدد مؤشرًا فارغًا وإذا كان من النوع المحدد.

نفي هذا الماكرو، "OP_TYPE_ISNT" متاح أيضًا
"OP_TYPE_IS_NN" و"OP_TYPE_ISNT_NN" اللذان يتجاهلان علامة اختيار المؤشر NULL.

منطقي OP_TYPE_IS(OP *o، نوع Optype)

OP_TYPE_IS_OR_WAS
يُرجع صحيحًا إذا لم يكن OP المحدد مؤشرًا فارغًا وإذا كان من النوع المحدد
أو كان موجودًا قبل أن يتم استبداله بـ OP من النوع OP_NULL.

إنكار هذا الماكرو، "OP_TYPE_ISNT_AND_WASNT" متاح أيضًا
"OP_TYPE_IS_OR_WAS_NN" و"OP_TYPE_ISNT_AND_WASNT_NN" التي تحذف NULL
فحص المؤشر.

منطقي OP_TYPE_IS_OR_WAS(OP *o، نوع Optype)

rv2cv_op_cv
يفحص عملية من المتوقع أن تحدد روتينًا فرعيًا في وقت التشغيل، و
يحاول تحديد وقت الترجمة أي روتين فرعي يحدده. هذا هو
يُستخدم عادةً أثناء تجميع Perl لتحديد ما إذا كان من الممكن إنشاء نموذج أولي
يتم تطبيقه على استدعاء دالة. com.cvop هل العملية قيد النظر، عادةً ما تكون "rv2cv"
مرجع سابق. يتم إرجاع مؤشر إلى الروتين الفرعي المحدد، إذا أمكن تحديده
بشكل ثابت، ويتم إرجاع مؤشر فارغ إذا لم يكن من الممكن تحديده
بشكل ثابت.

حاليًا، يمكن تحديد الروتين الفرعي بشكل ثابت إذا كان RV هو "rv2cv"
يتم تشغيله بواسطة عملية "gv" أو "const" مناسبة. المرجع "gv" هو
مناسبة إذا كانت فتحة السيرة الذاتية لـ GV مملوءة. تعتبر عملية "const" مناسبة إذا كان
يجب أن تكون القيمة الثابتة عبارة عن RV يشير إلى السيرة الذاتية. قد تتغير تفاصيل هذه العملية
في الإصدارات المستقبلية من بيرل. إذا كانت العملية "rv2cv" تحتوي على علامة "OPpENTERSUB_AMPER".
تعيين ثم لم يتم إجراء أي محاولة للتعرف على الروتين الفرعي بشكل ثابت: هذه العلامة
يستخدم لقمع سحر وقت الترجمة عند استدعاء روتين فرعي، مما يجبره على استخدامه
سلوك وقت التشغيل الافتراضي

If الأعلام تم تعيين البت "RV2CVOPCV_MARK_EARLY"، ثم التعامل مع GV
تم تعديل المرجع. إذا تم فحص GV ووجد أن فتحة السيرة الذاتية الخاصة بها
فارغًا، فإن العملية "gv" تحتوي على مجموعة العلامات "OPpEARLY_CV". إذا لم يكن المرجع كذلك
تم تحسينها بعيدًا، ويتم ملء فتحة السيرة الذاتية لاحقًا بإجراء فرعي يحتوي على
النموذج الأولي، يؤدي هذا العلم في النهاية إلى ظهور التحذير "الذي تم استدعاؤه مبكرًا جدًا للتحقق منه
النموذج المبدئي".

If الأعلام تم تعيين البت "RV2CVOPCV_RETURN_NAME_GV"، فبدلاً من إرجاع ملف
مؤشر إلى الروتين الفرعي فهو يُرجع مؤشرًا إلى GV معطيًا أكبر قدر ممكن
الاسم المناسب للروتين الفرعي في هذا السياق. عادة هذا هو مجرد
"CvGV" للروتين الفرعي، ولكن بالنسبة للروتين الفرعي المجهول ("CvANON") فهذا هو الحال
المشار إليه من خلال GV سيكون هو GV المرجعي. الناتج "GV*" هو
يلقي إلى "السيرة الذاتية *" ليتم إعادتها. يتم إرجاع مؤشر فارغ كالمعتاد إذا لم يكن هناك
روتين فرعي قابل للتحديد بشكل ثابت.

السيرة الذاتية * rv2cv_op_cv(OP *cvop، أعلام U32)

حزمة أفرغ


قائمة الحزم
تنفيذ المحرك علية() وظيفة بيرل.

قائمة حزم باطلة (SV *cat، const char *pat،
const char *patend، SV **beglist،
SV ** القائمة النهائية)

تفريغ
المحرك الذي ينفذ أفرغ() وظيفة بيرل.

باستخدام القالب pat..patend، تقوم هذه الوظيفة بفك ضغط السلسلة s..strend في ملف
عدد SVs المميتة، والتي تدفعها إلى مكدس وسيطة Perl (@_) (حتى تتمكن من ذلك
سوف تحتاج إلى إصدار "PUTBACK" قبل و"SPAGAIN" بعد استدعاء هذا
وظيفة). تقوم بإرجاع عدد العناصر المدفوعة.

يجب أن تشير مؤشرات strend وpatend إلى البايت الذي يلي الأخير
حرف كل سلسلة.

على الرغم من أن هذه الدالة تُرجع قيمها على مكدس وسيطات Perl، إلا أنها لا تقوم بذلك
خذ أي معلمات من تلك المكدس (وبالتالي ليست هناك حاجة للقيام بذلك على وجه الخصوص
علامة PUSHMARK قبل الاتصال بها، على عكس "call_pv" على سبيل المثال).

تفريغ I32 (const char *pat،
const char *patend، const char *s،
const char *strend، أعلام U32)

وسادة البيانات هياكل


قائمة السيرة الذاتية
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يمكن أن تحتوي السيرة الذاتية على CvPADLIST(cv) لتعيينها للإشارة إلى قائمة PADLIST. هذه هي السيرة الذاتية
لوحة الكتابة، التي تخزن المتغيرات المعجمية وكود التشغيل المؤقت ولكل خيط
القيم.

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

لا تحتوي XSUBs على CvPADLIST. يقوم dXSTARG بجلب القيم من PL_curpad، ولكن هذا هو الحال
حقًا لوحة المتصلين (يتم تخصيص فتحة منها بواسطة كل entersub). لا
احصل على CvPADLIST أو قم بتعيينه إذا كانت السيرة الذاتية هي XSUB (كما هو محدد بواسطة "CvISXSUB()")، CvPADLIST
يتم إعادة استخدام الفتحة لغرض داخلي مختلف في XSUBs.

تحتوي PADLIST على مصفوفة C حيث يتم تخزين اللوحات.

الإدخال رقم 0 لقائمة PADLIST هو PADLIST الذي يمثل "الأسماء" أو
بالأحرى "معلومات النوع الثابت" للمفردات. العناصر الفردية أ
PADNAMELIST هي أسماء PADNAMEs. قد تؤدي عمليات إعادة البناء المستقبلية إلى إيقاف PADNAMELIST من
يتم تخزينها في مصفوفة PADLIST، لذا لا تعتمد عليها. راجع "PadlistNAMES".

الإدخال CvDEPTH لقائمة PADLIST هو PAD (AV) وهو إطار المكدس عند
هذا العمق من العودية في السيرة الذاتية. الفتحة 0 للإطار AV هي AV وهي
@_. الإدخالات الأخرى هي تخزين المتغيرات وأهداف العمليات.

التكرار على قائمة PADNAMELIST يتكرر على جميع عناصر اللوحة الممكنة. فتحات الوسادة
للأهداف (SVs_PADTMP) وGVs ينتهي بهم الأمر بالحصول على "أسماء" &PL_padname_undef، بينما
تحتوي فتحات الثوابت على "أسماء" &PL_padname_const (انظر Pad_alloc()). الذي - التي
يتم استخدام &PL_padname_undef و&PL_padname_const في تفاصيل التنفيذ
قابل للتغير. لاختبارها، استخدم "!PadnamePV(name)" و"PadnamePV(name)"
&& !PadnameLEN(name)"، على التوالي.

فقط فتحاتي/فتحاتنا المتغيرة تحصل على أسماء صالحة. أما الباقي فهو أهداف تشغيلية/مشاهد عامة/ثوابت
والتي يتم تخصيصها أو حلها بشكل ثابت في وقت الترجمة. هذه لا تملك
الأسماء التي يمكن من خلالها البحث عنها من كود Perl في وقت التشغيل من خلال التقييم"" the
الطريقة التي يمكن أن تكون بها متغيراتي/متغيراتنا. نظرًا لأنه لا يمكن البحث عنهم بواسطة "الاسم" ولكن بواسطة فقط
يتم تخصيص الفهرس الخاص بهم في وقت الترجمة (والذي يكون عادةً في PL_op->op_targ)،
إن إضاعة اسم SV بالنسبة لهم ليس له معنى.

أسماء اللوحة الموجودة في PADNAMELIST لها PV تحمل اسم المتغير.
يشكل الحقلان COP_SEQ_RANGE_LOW و_HIGH نطاقًا (منخفض+1..عالي شامل) من
أرقام cop_seq التي يكون الاسم صالحًا لها. أثناء التجميع، قد تكون هذه الحقول
احتفظ بالقيمة الخاصة PERL_PADSEQ_INTRO للإشارة إلى المراحل المختلفة:

COP_SEQ_RANGE_LOW _HIGH
----------------- -----
متغير PERL_PADSEQ_INTRO 0 لم يتم تقديمه بعد:
{ بلدي ($س
valid-seq# متغير PERL_PADSEQ_INTRO في النطاق:
{ بلدي ($س)
valid-seq# valid-seq# اكتمل تجميع النطاق:
{بلدي ($x) }

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

إذا تم تعيين PadnameOUTER على اسم اللوحة، فستكون تلك الفتحة الموجودة في الإطار AV هي a
REFCNT'ed إشارة إلى معجم من "الخارج". مثل هذه الإدخالات في بعض الأحيان
يشار إليها باسم "وهمية". في هذه الحالة، لا يستخدم الاسم "منخفض" و"عالي".
قم بتخزين نطاق cop_seq، لأنه موجود في النطاق طوال الوقت. بدلا من المتاجر "العالية".
بعض الأعلام التي تحتوي على معلومات حول المعجم الحقيقي (هل تم الإعلان عنه في حالة مجهولة، و
هل يمكن إنشاء مثيل له عدة مرات؟)، وبالنسبة لـ ANONs المزيفة، "منخفض"
يحتوي على الفهرس الموجود داخل لوحة الوالدين حيث يتم تخزين قيمة المعجم
جعل الاستنساخ أسرع.

إذا كان "الاسم" هو "&" فإن الإدخال المقابل في PAD هو سيرة ذاتية تمثل أ
إغلاق محتمل.

لاحظ أنه يتم التعامل مع التنسيقات على أنها تنسيقات فرعية، ويتم استنساخها في كل مرة تتم فيها الكتابة
يسمى (إذا لزم الأمر).

يتم مسح العلامة SVs_PADSTALE من المفردات في كل مرة يتم فيها لي() يتم تنفيذه، و
تعيين على الخروج من النطاق. يتيح ذلك ظهور التحذير "المتغير $x غير متوفر".
ولدت في التقييمات، مثل

{ $x = 1؛ sub f { eval '$x'} } f();

بالنسبة لمتغيرات الحالة، يتم تحميل SVs_PADSTALE بشكل زائد ليعني "لم تتم تهيئته بعد"، ولكن هذا
يتم تخزين الحالة الداخلية في إدخال لوحة منفصل.

قائمة PADLIST * CvPADLIST(CV *cv)

PadARRAY
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مجموعة C من إدخالات اللوحة.

SV ** PadARRAY (لوحة الوسادة)

PadlistARRAY
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

المصفوفة C لقائمة اللوح، التي تحتوي على الوسادات. قم باشتراكه فقط بالأرقام >=
1، حيث أن الإدخال 0 ليس مضمونًا أن يظل قابلاً للاستخدام.

PAD ** PadlistARRAY (قائمة لوحات PADLIST)

بادليست ماكس
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

فهرس آخر مساحة مخصصة في قائمة Padlist. لاحظ أن اللوحة الأخيرة قد
يكون في فتحة سابقة. أي إدخالات تتبعه ستكون فارغة في هذه الحالة.

SSize_t PadlistMAX (قائمة لوحات PADLIST)

PadlistNAMES
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

الأسماء المرتبطة بإدخالات اللوحة.

PADNAMELIST * PadlistNAMES(قائمة لوحات PADLIST)

PadlistNAMESARRAY
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مجموعة C من أسماء اللوحة.

PADNAME ** PadlistNAMESARRAY (قائمة لوحات PADLIST)

قائمة PadNAMESMAX
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

فهرس اسم اللوحة الأخيرة.

SSize_t PadlistNAMESMAX(قائمة لوحات PADLIST)

قائمة الوسادةREFCNT
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

العدد المرجعي لقائمة الوسادة. حاليا هذا هو دائما 1.

U32 PadlistREFCNT (قائمة PADLIST)

ملاحظة PadMAX: هذه الوظيفة تجريبية وقد تتغير أو تتم إزالتها دون إشعار.

فهرس آخر إدخال في اللوحة.

SSize_t PadMAX (لوحة الوسادة)

اسم الوسادةLEN
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

طول الاسم.

STRLEN PadnameLEN (PADNAME pn)

PadnamelistARRAY
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

مجموعة C من أسماء اللوحة.

PADNAME ** PadnamelistARRAY (PADNAMELIST pnl)

PadnamelistMAX
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

فهرس اسم اللوحة الأخيرة.

SSize_t PadnamelistMAX (PADNAMELIST pnl)

قائمة الأسماءREFCNT
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

العدد المرجعي لقائمة أسماء اللوحة.

SSize_t PadnamelistREFCNT(PADNAMELIST pnl)

PadnamelistREFCNT_dec
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يخفض العدد المرجعي لقائمة أسماء اللوحة.

باطلة PadnamelistREFCNT_dec (PADNAMELIST pnl)

PadnamePV
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

الاسم المخزن في بنية اسم اللوحة. يؤدي هذا إلى إرجاع NULL للفتحة المستهدفة.

شار * PadnamePV(PADNAME pn)

اسم اللوحةREFCNT
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

العدد المرجعي لاسم اللوحة.

SSize_t PadnameREFCNT(PADNAME pn)

اسم اللوحةREFCNT_dec
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يخفض العدد المرجعي لاسم اللوحة.

PadnameREFCNT_dec (PADNAME pn) باطلة

PadnameSV
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

إرجاع اسم اللوحة كـ SV بشري.

SV * PadnameSV(PADNAME pn)

اسم اللوحةUTF8
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

ما إذا كان PadnamePV موجودًا في UTF8. حاليا، هذا صحيح دائما.

منطقي PadnameUTF8(PADNAME pn)

Pad_add_name_pvs
تمامًا مثل "pad_add_name_pvn"، ولكنه يأخذ سلسلة حرفية بدلاً من a
زوج سلسلة / طول.

PADOFFSET Pad_add_name_pvs(const char *name, U32 flags,
HV * typestash ، HV * ourstash)

Pad_findmy_pvs
تمامًا مثل "pad_findmy_pvn"، ولكنه يأخذ سلسلة حرفية بدلاً من "a
زوج سلسلة / طول.

PADOFFSET Pad_findmy_pvs(const char *name, U32 flags)

Pad_new قم بإنشاء قائمة جديدة لتحديث المتغيرات العامة للتجميع الحالي
قائمة Padlist للإشارة إلى قائمة Padlist الجديدة. يمكن OR'ed العلامات التالية معًا:

Padnew_CLONE هذه اللوحة مخصصة للسيرة الذاتية المستنسخة
Padnew_SAVE احفظ العناصر العالمية القديمة في مكدس الحفظ
يقوم Padnew_SAVESUB أيضًا بحفظ أشياء إضافية لبدء القسم الفرعي

قائمة PADLIST * Pad_new (أعلام int)

PL_comppad
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

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

PL_comppad_name
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

أثناء الترجمة، يشير هذا إلى المصفوفة التي تحتوي على جزء الأسماء من اللوحة
للكود المترجم حاليًا.

PL_curpad
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يشير مباشرة إلى نص الصفيف "PL_comppad". (أي هذا
"PAD_ARRAY(PL_comppad)".)

لكل مترجم المتغيرات


PL_modglobal
"PL_modglobal" هو مترجم HV عالمي للأغراض العامة للاستخدام من خلال الامتدادات
التي تحتاج إلى الاحتفاظ بالمعلومات على أساس كل مترجم. في السؤال، يمكن أيضا
يمكن استخدامه كجدول رموز للملحقات لمشاركة البيانات فيما بينها. إنها
فكرة جيدة أن تستخدم المفاتيح التي يسبقها اسم الحزمة للملحق الذي يمتلك الملف
البيانات.

HV* PL_modglobal

PL_na متغير ملائم يُستخدم عادةً مع "SvPV" عندما لا يهتم أحد
حول طول السلسلة. عادةً ما يكون الإعلان عن a
المتغير المحلي واستخدمه بدلاً من ذلك أو لاستخدام الماكرو "SvPV_nolen".

سترلين PL_na

PL_opfreehook
عندما لا تكون "NULL"، سيتم استدعاء الدالة التي يشير إليها هذا المتغير في كل مرة
يتم تحرير OP باستخدام OP المقابل كوسيطة. وهذا يسمح بتمديدات ل
تحرير أي سمة إضافية قاموا بإرفاقها محليًا بـ OP. ومن المؤكد أيضا
لإطلاق النار أولاً على الوالد OP ثم على أطفاله.

عند استبدال هذا المتغير، يعتبر تخزين ملف
ربما تم تثبيت الخطاف مسبقًا وأنك تتذكره داخل خطافك.

Perl_ophook_t PL_opfreehook

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

لا ينبغي أبدًا استبدال مُحسِّن ثقب الباب بالكامل. بدلا من ذلك، أضف التعليمات البرمجية إلى
ذلك عن طريق التفاف المحسن الموجود. يمكن رؤية الطريقة الأساسية للقيام بذلك في
"تجميع التمريرة 3: تحسين ثقب الباب" في perlguts. إذا كان الرمز الجديد يرغب في ذلك
تعمل على العمليات في جميع أنحاء بنية الروتين الفرعي، وليس فقط في الأعلى
المستوى، فمن المرجح أن يكون أكثر ملاءمة لالتفاف الخطاف "PL_rpeepp".

peep_t PL_peepp

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

لا ينبغي أبدًا استبدال مُحسِّن ثقب الباب بالكامل. بدلا من ذلك، أضف التعليمات البرمجية إلى
ذلك عن طريق التفاف المحسن الموجود. يمكن رؤية الطريقة الأساسية للقيام بذلك في
"تجميع التمريرة 3: تحسين ثقب الباب" في perlguts. إذا كان الرمز الجديد يرغب في ذلك
تعمل فقط على العمليات في المستوى الأعلى للروتين الفرعي، وليس طوال الوقت
الهيكل، فمن المرجح أن يكون أكثر ملاءمة لالتفاف الخطاف "PL_peepp".

peep_t PL_rpeepp

PL_sv_no
هذا هو SV "الخاطئ". راجع "PL_sv_yes". قم دائمًا بالإشارة إلى هذا باسم &PL_sv_no.

SV PL_sv_no

PL_sv_undef
هذا هو SV "undef". قم دائمًا بالإشارة إلى هذا باسم &PL_sv_undef.

SV PL_sv_undef

PL_sv_yes
هذا هو SV "الحقيقي". راجع "PL_sv_no". قم دائمًا بالإشارة إلى هذا باسم &PL_sv_yes.

SV PL_sv_yes

REGEXP وظائف


ماكرو SvRX Convenience للحصول على REGEXP من SV. وهذا يعادل تقريبا
إلى المقتطف التالي:

إذا (SvMAGICAL(sv))
mg_get(sv);
إذا (SvROK(sv))
sv = MUTABLE_SV(SvRV(sv));
إذا (SvTYPE(sv) == SVt_REGEXP)
إرجاع (REGEXP*) sv؛

سيتم إرجاع NULL إذا لم يتم العثور على REGEXP*.

REGEXP * SvRX(SV *sv)

SvRXOK يُرجع قيمة منطقية تشير إلى ما إذا كان SV (أو الذي يشير إليه) هو a
REGEXP.

إذا كنت تريد القيام بشيء ما باستخدام REGEXP* لاحقًا، فاستخدم SvRX بدلاً من ذلك وتحقق منه
باطل.

منطقي SvRXOK(SV* sv)

كومة تلاعب وحدات الماكرو


dMARK قم بتعريف متغير علامة المكدس، "علامة"، لـ XSUB. انظر "مارك" و
"دوريجمارك".

dMARK;

دوريجمارك
يحفظ علامة المكدس الأصلية لـ XSUB. انظر "العلامة الأصلية".

دوريجمارك;

يعلن dSP عن نسخة محلية من مؤشر مكدس Perl لـ XSUB، وهو متاح عبر "SP"
دقيق. انظر "س.ب".

دسب؛

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

تمديد باطلة (SP، SSize_t العناصر)

MARK متغير علامة المكدس لـ XSUB. راجع "DMARK".

mPUSHi ادفع عددًا صحيحًا إلى المكدس. يجب أن تحتوي المكدس على مساحة لهذا العنصر. يفعل
لا تستخدم "TARG". انظر أيضًا "PUSHi" و"mXPUSHi" و"XPUSHi".

باطلة mPUSHi (الرابع الرابع)

mPUSHn ادفع ضعفًا إلى المكدس. يجب أن تحتوي المكدس على مساحة لهذا العنصر. يفعل
لا تستخدم "TARG". انظر أيضًا "PUSHn" و"mXPUSHn" و"XPUSHn".

باطلة mPUSHn (NV nv)

mPUSHp ادفع سلسلة إلى المكدس. يجب أن تحتوي المكدس على مساحة لهذا العنصر. ال
يشير "len" إلى طول السلسلة. لا يستخدم "TARG". انظر أيضًا "PUSHp"،
"mXPUSHp" و"XPUSHp".

باطلة mPUSHp (شار * شارع، STRLEN لين)

mPUSHs تدفع SV إلى المكدس وتقضي على SV. يجب أن تحتوي المكدس على مساحة لـ
هذا العنصر. لا يستخدم "TARG". انظر أيضًا "PUSHs" و"mXPUSHs".

mPUSHs باطلة (SV * sv)

mPUSHu ادفع عددًا صحيحًا غير موقّع إلى المكدس. يجب أن يكون لدى المكدس مساحة لهذا الغرض
عنصر. لا يستخدم "TARG". انظر أيضًا "PUSHu" و"mXPUSHu" و"XPUSHu".

باطلة mPUSHu (الأشعة فوق البنفسجية)

mXPUSHi ادفع عددًا صحيحًا إلى المكدس، وقم بتوسيع المكدس إذا لزم الأمر. لا تستخدم
"الهدف". انظر أيضًا "XPUSHi" و"mPUSHi" و"PUSHi".

باطلة mXPUSHi (IV iv)

mXPUSHn ادفع قطعة مزدوجة على المكدس، وقم بتمديد المكدس إذا لزم الأمر. لا تستخدم
"الهدف". انظر أيضًا "XPUSHn" و"mPUSHn" و"PUSHn".

باطلة mXPUSHn (NV nv)

mXPUSHp ادفع سلسلة إلى المكدس، وقم بتوسيع المكدس إذا لزم الأمر. "لين"
يشير إلى طول السلسلة. لا يستخدم "TARG". انظر أيضًا "XPUSHp"،
"mPUSHp" و"PUSHp".

باطلة mXPUSHp (char* str، STRLEN len)

تقوم mXPUSHs بدفع SV إلى المكدس، وتوسيع المكدس إذا لزم الأمر وإماتة SV.
لا يستخدم "TARG". انظر أيضًا "XPUSHs" و"mPUSHs".

mXPUSHs باطلة (SV * sv)

mXPUSHu ادفع عددًا صحيحًا غير موقّع إلى المكدس، وقم بتوسيع المكدس إذا لزم الأمر. يفعل
لا تستخدم "TARG". انظر أيضًا "XPUSHu" و"mPUSHu" و"PUSHu".

باطلة mXPUSHu (الأشعة فوق البنفسجية)

اصلي
علامة المكدس الأصلية لـ XSUB. انظر "دوريجمارك".

POPi ينبثق عددًا صحيحًا من المكدس.

الرابع بوبي

POPL ينبثق لفترة طويلة من المكدس.

POPL طويل

POPn ينبثق مضاعفة من المكدس.

NV POPn

POPp ينبثق سلسلة من المكدس.

شار * بوب

POPpbytex
تنبثق سلسلة من المكدس والتي يجب أن تتكون من بايتات، أي أحرف <256.

شار* POPpbytex

POPpx ينبثق سلسلة من المكدس. مطابق لـ POPp. هناك اسمان ل
أسباب تاريخية.

شار* POPpx

الملوثات العضوية الثابتة تنبثق SV من المكدس.

SV * الملوثات العضوية الثابتة

PUSHI ادفع عددًا صحيحًا إلى المكدس. يجب أن تحتوي المكدس على مساحة لهذا العنصر.
يتعامل مع السحر "المحدد". يستخدم "TARG"، لذلك يجب استدعاء "dTARGET" أو "dXSTARG".
أعلن ذلك. لا تستدعي وحدات ماكرو متعددة موجهة نحو "TARG" لإرجاع القوائم منها
XSUB - راجع "mPUSHi" بدلاً من ذلك. انظر أيضًا "XPUSHi" و"mXPUSHi".

باطلة PUSHI (الرابع الرابع)

علامة الدفع
فتح قوس للوسائط عند رد الاتصال. راجع "PUTBACK" وperlcall.

علامة ضغط باطلة (SP)

دفعمورتال
ادفع SV بشريًا جديدًا إلى المكدس. يجب أن تحتوي المكدس على مساحة لهذا العنصر.
لا يستخدم "TARG". انظر أيضًا "PUSHs" و"XPUSHmortal" و"XPUSHs".

باطلة PUSHmortal()

PUSHn ادفع قطعة مزدوجة على المكدس. يجب أن تحتوي المكدس على مساحة لهذا العنصر. مقابض
"تعيين" السحر. يستخدم "TARG"، لذلك يجب استدعاء "dTARGET" أو "dXSTARG" للإعلان
هو - هي. لا تستدعي وحدات ماكرو متعددة موجهة نحو "TARG" لإرجاع قوائم من XSUB - راجع
"mPUSHn" بدلاً من ذلك. انظر أيضًا "XPUSHn" و"mXPUSHn".

PUSHn باطلة (NV nv)

PUSHp ادفع سلسلة على المكدس. يجب أن تحتوي المكدس على مساحة لهذا العنصر. ال
يشير "len" إلى طول السلسلة. يتعامل مع السحر "المحدد". يستخدم "TARG"، لذلك
يجب استدعاء "dTARGET" أو "dXSTARG" للإعلان عنه. لا تتصل بعدة
وحدات الماكرو ذات التوجه "TARG" لإرجاع القوائم من XSUB - راجع "mPUSHp" بدلاً من ذلك. يرى
أيضًا "XPUSHp" و"mXPUSHp".

باطلة PUSHp (شار * شارع، STRLEN لين)

الدفعات تدفع SV إلى المكدس. يجب أن تحتوي المكدس على مساحة لهذا العنصر. لا
التعامل مع السحر "المجموعة". لا يستخدم "TARG". انظر أيضًا "PUSHmortal" و"XPUSHs" و
"XPUSHmortal".

الدفعات الفارغة (SV * sv)

PUSHu ادفع عددًا صحيحًا غير موقّع إلى المكدس. يجب أن يكون لدى المكدس مساحة لهذا الغرض
عنصر. يتعامل مع السحر "المحدد". يستخدم "TARG"، لذلك يجب أن يكون "dTARGET" أو "dXSTARG".
دعا للإعلان عن ذلك. لا تقم باستدعاء وحدات ماكرو متعددة موجهة نحو "TARG" لإرجاع القوائم
من XSUB - راجع "mPUSHu" بدلاً من ذلك. انظر أيضًا "XPUSHu" و"mXPUSHu".

باطلة بوشو (الأشعة فوق البنفسجية)

PUTBACK قوس الإغلاق لوسيطات XSUB. تتم معالجة هذا عادةً بواسطة "xsubpp". يرى
"PUSHMARK" وperlcall لاستخدامات أخرى.

ضعها بالخلف؛

مؤشر المكدس SP. تتم معالجة هذا عادةً بواسطة "xsubpp". راجع "dSP" و"SPAGAIN".

SPAGAIN قم بإعادة جلب مؤشر المكدس. تستخدم بعد رد الاتصال. انظر بيرلكال.

سباجين؛

XPUSHi ادفع عددًا صحيحًا إلى المكدس، وقم بتوسيع المكدس إذا لزم الأمر. مقابض "مجموعة"
سحر. يستخدم "TARG"، لذلك يجب استدعاء "dTARGET" أو "dXSTARG" للإعلان عنه. يفعل
عدم استدعاء وحدات ماكرو متعددة موجهة نحو "TARG" لإرجاع قوائم من XSUB - راجع
"mXPUSHi" بدلاً من ذلك. انظر أيضًا "PUSHi" و"mPUSHi".

باطلة XPUSHi (الرابع الرابع)

XPUSHmortal
ادفع SV بشريًا جديدًا إلى المكدس، وقم بتمديد المكدس إذا لزم الأمر. لا
استخدم "TARG". انظر أيضًا "XPUSHs" و"PUSHmortal" و"PUSHs".

باطلة XPUSHmortal()

XPUSHn ادفع قطعة مزدوجة على المكدس، وقم بتمديد المكدس إذا لزم الأمر. مقابض "مجموعة"
سحر. يستخدم "TARG"، لذلك يجب استدعاء "dTARGET" أو "dXSTARG" للإعلان عنه. يفعل
عدم استدعاء وحدات ماكرو متعددة موجهة نحو "TARG" لإرجاع قوائم من XSUB - راجع
"mXPUSHn" بدلاً من ذلك. انظر أيضًا "PUSHn" و"mPUSHn".

باطلة XPUSHn (NV nv)

XPUSHp ادفع سلسلة إلى المكدس، وقم بتمديد المكدس إذا لزم الأمر. "لين"
يشير إلى طول السلسلة. يتعامل مع السحر "المحدد". يستخدم "TARG"، لذلك
يجب استدعاء "dTARGET" أو "dXSTARG" للإعلان عنه. لا تتصل بعدة
وحدات الماكرو ذات التوجه "TARG" لإرجاع القوائم من XSUB - راجع "mXPUSHp" بدلاً من ذلك. يرى
أيضًا "PUSHp" و"mPUSHp".

باطلة XPUSHp (char* str، STRLEN len)

تقوم وحدات XPUSH بدفع SV إلى المكدس، وتوسيع المكدس إذا لزم الأمر. لا يتعامل
"تعيين" السحر. لا يستخدم "TARG". انظر أيضًا "XPUSHmortal" و"PUSHs" و
"PUSHmortal".

XPUSHs باطلة (SV* sv)

XPUSHu ادفع عددًا صحيحًا غير موقّع إلى المكدس، وقم بتوسيع المكدس إذا لزم الأمر.
يتعامل مع السحر "المحدد". يستخدم "TARG"، لذلك يجب استدعاء "dTARGET" أو "dXSTARG".
أعلن ذلك. لا تستدعي وحدات ماكرو متعددة موجهة نحو "TARG" لإرجاع القوائم منها
XSUB - راجع "mXPUSHu" بدلاً من ذلك. انظر أيضًا "PUSHu" و"mPUSHu".

باطلة XPUSHu (الأشعة فوق البنفسجية للأشعة فوق البنفسجية)

XSRETURN
العودة من XSUB، تشير إلى عدد العناصر الموجودة على المكدس. هذا عادة
يتم التعامل معها بواسطة "xsubpp".

XSRETURN باطلة (العناصر الداخلية)

XSRETURN_EMPTY
قم بإرجاع قائمة فارغة من XSUB على الفور.

XSRETURN_EMPTY ،

XSRETURN_IV
قم بإرجاع عدد صحيح من XSUB على الفور. يستخدم "XST_mIV".

باطلة XSRETURN_IV(IV IV)

XSRETURN_NO
قم بإرجاع &PL_sv_no من XSUB على الفور. يستخدم "XST_mNO".

XSRETURN_NO;

XSRETURN_NV
قم بإرجاع مزدوج من XSUB على الفور. يستخدم "XST_mNV".

باطلة XSRETURN_NV(NV nv)

XSRETURN_PV
قم بإرجاع نسخة من سلسلة من XSUB على الفور. يستخدم "XST_mPV".

باطلة XSRETURN_PV(شار* شارع)

XSRETURN_UNDEF
قم بإرجاع &PL_sv_undef من XSUB على الفور. يستخدم "XST_mUNDEF".

XSRETURN_UNDEF ،

XSRETURN_UV
قم بإرجاع عدد صحيح من XSUB على الفور. يستخدم "XST_mUV".

باطلة XSRETURN_UV(IV الأشعة فوق البنفسجية)

XSRETURN_YES
قم بإرجاع &PL_sv_yes من XSUB على الفور. يستخدم "XST_mYES".

XSRETURN_YES;

XST_mIV ضع عددًا صحيحًا في الموضع المحدد "pos" على المكدس. القيمة هي
المخزنة في SV مميت جديد.

باطلة XST_mIV (int pos، IV iv)

XST_mNO ضع &PL_sv_no في الموضع المحدد "pos" على المكدس.

باطلة XST_mNO(int pos)

XST_mNV ضع مزدوجًا في الموضع المحدد "pos" على المكدس. القيمة هي
المخزنة في SV مميت جديد.

باطلة XST_mNV (int pos، NV nv)

XST_mPV ضع نسخة من السلسلة في الموضع المحدد "pos" على المكدس. ال
يتم تخزين القيمة في SV بشري جديد.

باطلة XST_mPV (int pos، char * str)

XST_mUNDEF
ضع &PL_sv_undef في الموضع المحدد "pos" على المكدس.

باطلة XST_mUNDEF(int pos)

XST_mYES
ضع &PL_sv_yes في الموضع المحدد "pos" على المكدس.

باطلة XST_mYES (نقطة البيع)

SV اعلام


svtype تعداد العلامات لأنواع بيرل. هذه موجودة في الملف SV.H في "سفتيب"
التعداد. اختبر هذه العلامات باستخدام الماكرو "SvTYPE".

الأنواع هي:

SVt_NULL
SVt_IV
SVt_NV
SVt_RV
SVt_PV
SVt_PVIV
SVt_PVNV
SVt_PVMG
SVt_INVLIST
SVt_REGEXP
SVt_PVGV
SVt_PVLV
SVt_PVAV
SVt_PVHV
SVt_PVCV
SVt_PVFM
SVt_PVIO

يتم شرح هذه الأمور بسهولة من الأسفل إلى الأعلى.

SVt_PVIO مخصص لكائنات الإدخال/الإخراج، وSVt_PVFM للتنسيقات، وSVt_PVCV للروتينات الفرعية،
SVt_PVHV للتجزئة وSVt_PVAV للمصفوفات.

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

ومن ثم، فإن التحقق من "SvTYPE(sv) <SVt_PVAV" هو أفضل طريقة لمعرفة ما إذا كان هناك شيء ما
هو العددية.

يمثل SVt_PVGV typeglob. إذا كان !SvFAKE(sv)، فهو حقيقي وغير قابل للإكراه
typeglob. إذا كان SvFAKE(sv)، فهو عددي تم وضع typeglob عليه
مُكَلَّف. سيؤدي التعيين إليها مرة أخرى إلى منعها من أن تكون typeglob. SVt_PVLV
يمثل عددًا قياسيًا يفوض عددًا قياسيًا آخر خلف الكواليس. إنها
تستخدم، على سبيل المثال، للقيمة المرجعة لـ "substr" ولعناصر التجزئة والصفيف المرتبطة.
يمكنه الاحتفاظ بأي قيمة عددية، بما في ذلك typeglob. SVt_REGEXP مخصص للعادي
التعبيرات. SVt_INVLIST مخصص للاستخدام الداخلي الأساسي لـ Perl فقط.

يمثل SVt_PVMG حجمًا قياسيًا "عاديًا" (وليس typeglob أو تعبيرًا عاديًا أو
مندوب). نظرًا لأن معظم الكميات العددية لا تحتاج إلى جميع الحقول الداخلية لـ PVMG، فإننا
حفظ الذاكرة عن طريق تخصيص بنيات أصغر عندما يكون ذلك ممكنًا. جميع الأنواع الأخرى هي
مجرد أشكال أبسط من SVt_PVMG، مع عدد أقل من الحقول الداخلية.
يمكن لـ SVt_NULL الاحتفاظ بـ undef فقط. يمكن أن يحتوي SVt_IV على undef أو عدد صحيح أو مرجع.
(SVt_RV هو اسم مستعار لـ SVt_IV، وهو موجود للتوافق مع الإصدارات السابقة.) SVt_NV
يمكن أن تعقد أي من هؤلاء أو مزدوجة. يمكن لـ SVt_PV الاحتفاظ بـ undef أو سلسلة فقط.
SVt_PVIV هي مجموعة شاملة من SVt_PV وSVt_IV. SVt_PVNV مشابه. يمكن SVt_PVMG
احتفظ بأي شيء يمكن أن يحمله SVt_PVNV، ولكن يمكن مباركته أو
سحري.

SVt_INVLIST
اكتب علامة للعدديات. انظر "svtype".

SVt_IV اكتب إشارة للعدديات. انظر "svtype".

SVt_NULL
اكتب علامة للعدديات. انظر "svtype".

SVt_NV اكتب إشارة للعدديات. انظر "svtype".

SVt_PV اكتب إشارة للعددية. انظر "svtype".

SVt_PVAV
اكتب علامة للمصفوفات. انظر "svtype".

SVt_PVCV
اكتب علامة للإجراءات الفرعية. انظر "svtype".

SVt_PVFM
اكتب علامة للتنسيقات. انظر "svtype".

SVt_PVGV
اكتب علامة لـ typeglobs. انظر "svtype".

SVt_PVHV
اكتب علامة للتجزئات. انظر "svtype".

SVt_PVIO
اكتب إشارة لكائنات الإدخال/الإخراج. انظر "svtype".

SVt_PVIV
اكتب علامة للعدديات. انظر "svtype".

SVt_PVLV
اكتب علامة للعدديات. انظر "svtype".

SVt_PVMG
اكتب علامة للعدديات. انظر "svtype".

SVt_PVNV
اكتب علامة للعدديات. انظر "svtype".

SVt_REGEXP
اكتب علامة للتعبيرات العادية. انظر "svtype".

SV تلاعب وظائف


boolSV يُرجع SV صحيحًا إذا كانت "b" قيمة حقيقية، أو يُرجع SV خاطئًا إذا كانت "b" تساوي 0.

راجع أيضًا "PL_sv_yes" و"PL_sv_no".

SV * boolSV(منطقي ب)

croak_xs_usage
متغير متخصص من "croak()" لإصدار رسالة الاستخدام لـ xsubs

croak_xs_usage(cv, "eee_yow");

يعمل على تحديد اسم الحزمة واسم الروتين الفرعي من "السيرة الذاتية"، ثم يستدعي
"تشاءم()". وبالتالي، إذا كانت "cv" هي &ouch::awk، فستُطلق عليها "croak" على النحو التالي:

Perl_croak(aTHX_ "الاستخدام: %"SVf"::%"SVf"(%s)"، "ouch" "awk"،
"eee_yow");

باطلة croak_xs_usage(const CV *const cv,
const char * const params)

get_sv يُرجع SV لمقياس Perl المحدد. يتم تمرير "الأعلام" إلى "gv_fetchpv".
إذا تم تعيين "GV_ADD" ولم يكن متغير Perl موجودًا ، فسيتم إنشاؤه.
إذا كانت قيمة "الإشارات" تساوي صفرًا وكان المتغير غير موجود ، فسيتم إرجاع NULL.

ملاحظة: تم إهمال شكل perl_ لهذه الوظيفة.

SV* get_sv(const char *name، علامات I32)

newRV_inc
إنشاء غلاف RV لـ SV. العدد المرجعي لـ SV الأصلي هو
زيادة.

SV* newRV_inc(SV* sv)

newSVpadname
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يقوم بإنشاء SV جديد يحتوي على اسم اللوحة.

SV* newSVpadname(PADNAME *pn)

newSVpvn_utf8
إنشاء ملف SV جديد ونسخ سلسلة (والتي قد تحتوي على أحرف "NUL" ("\0"))
بداخله. إذا كان utf8 صحيحًا، فسيتم استدعاء "SvUTF8_on" على ملف SV الجديد. تم التنفيذ ك
غلاف حول "newSVpvn_flags".

SV* newSVpvn_utf8(NULLOK const char* s, STRLEN len,
U32 UTF8)

SvCUR يُرجع طول السلسلة الموجودة في SV. انظر "سفلين".

سترلين SvCUR(SV* sv)

SvCUR_set
قم بتعيين الطول الحالي للسلسلة الموجودة في SV. انظر "SvCUR" و
"SvIV_set".

باطلة SvCUR_set(SV* sv, STRLEN لين)

SvEND يُرجع مؤشرًا إلى النقطة الموجودة بعد الحرف الأخير في السلسلة مباشرةً
في SV، حيث يوجد عادة حرف "NUL" زائد (على الرغم من أن Perl
العددية لا تتطلب ذلك بشكل صارم). انظر "سفكور". الوصول إلى الحرف كما
*(سفيند (سف)).

تحذير: إذا كان "SvCUR" يساوي "SvLEN"، فإن "SvEND" يشير إلى غير مخصص
ذاكرة.

شار* سفيند(SV*SV)

SvGAMAGIC
يُرجع صحيحًا إذا كان SV قد تعرض للسحر أو التحميل الزائد. إذا كان أي منهما صحيحا ثم
العددية هي بيانات نشطة، ولديها القدرة على إرجاع قيمة جديدة في كل مرة
يتم الوصول إليها. ومن ثم يجب أن تكون حريصًا على قراءتها مرة واحدة فقط لكل مستخدم منطقيًا
العملية والعمل مع تلك القيمة التي تم إرجاعها. إذا لم يكن أي منهما صحيحا ثم العددية
لا يمكن تغيير القيمة إلا إذا تمت كتابتها.

U32 SvGAMAGIC(SV* sv)

يقوم SvGROW بتوسيع المخزن المؤقت للأحرف في SV بحيث يحتوي على مساحة للمشار إليه
عدد البايتات (تذكر حجز مساحة لحرف "NUL" إضافي زائد).
يستدعي "sv_grow" لإجراء التوسيع إذا لزم الأمر. إرجاع المؤشر إلى
المخزن المؤقت للأحرف. يجب أن يكون SV من النوع >= SVt_PV. أحد البدائل هو الاتصال
"sv_grow" إذا لم تكن متأكدًا من نوع SV.

شار * SvGROW(SV* sv، STRLEN لين)

SvIOK تقوم بإرجاع قيمة U32 تشير إلى ما إذا كان SV يحتوي على عدد صحيح.

U32 سفيوك (SV* sv)

SvIOKp تقوم بإرجاع قيمة U32 تشير إلى ما إذا كان SV يحتوي على عدد صحيح. يتحقق من
خاص جلسة. استخدم "SvIOK" بدلاً من ذلك.

U32 SvIOKp(SV* sv)

SvIOK_notUV
إرجاع قيمة منطقية تشير إلى ما إذا كان SV يحتوي على عدد صحيح موقّع.

منطقي SvIOK_notUV(SV* sv)

SvIOK_off
يقوم بإلغاء تحديد الحالة IV لـ SV.

باطلة SvIOK_off(SV* sv)

SvIOK_on
يخبر SV بأنه عدد صحيح.

باطلة SvIOK_on(SV* sv)

SvIOK_only
يخبر SV بأنه عدد صحيح ويعطل كافة البتات OK الأخرى.

باطل SvIOK_only(SV* sv)

SvIOK_only_UV
يخبر SV بأنه عدد صحيح غير موقّع ويعطل جميع البتات OK الأخرى.

باطلة SvIOK_only_UV(SV* sv)

SvIOK_UV
تقوم بإرجاع قيمة منطقية تشير إلى ما إذا كان SV يحتوي على عدد صحيح يجب أن يكون
يتم تفسيرها على أنها غير موقعة. عدد صحيح غير سالب تقع قيمته ضمن النطاق
يمكن وضع علامة على كل من IV وUV على أنها إما SvUOK أو SVIOK.

منطقي SvIOK_UV(SV* sv)

SvIsCOW تُرجع قيمة U32 تشير إلى ما إذا كان SV قابلاً للنسخ عند الكتابة (إما تجزئة مشتركة
المقاييس الرئيسية، أو المقاييس الكاملة للنسخ عند الكتابة إذا تم تكوين 5.9.0 لـ COW).

U32 SvIsCOW(SV* sv)

SvIsCOW_shared_hash
يُرجع قيمة منطقية تشير إلى ما إذا كان SV عبارة عن مفتاح تجزئة مشترك للنسخ عند الكتابة
العددية.

منطقي SvIsCOW_shared_hash(SV* sv)

يقوم SvIV بإجبار SV المعطى على عدد صحيح وإعادته. راجع "SvIVx" للحصول على الإصدار
مما يضمن تقييم SV مرة واحدة فقط.

IV SvIV(SV* sv)

SvIVX تُرجع القيمة الأولية في فتحة SV IV، بدون عمليات التحقق أو التحويلات. فقط
استخدمه عندما تكون متأكدًا من صحة SvIOK. انظر أيضًا "SvIV()".

IV SvIVX(SV* sv)

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

IV SvIVx(SV* sv)

SvIV_nomg
مثل "SvIV" لكنه لا يعالج السحر.

IV SvIV_nomg(SV* sv)

SvIV_set
قم بتعيين قيمة المؤشر IV في sv إلى val. من الممكن القيام بنفس الشيء
وظيفة هذا الماكرو مع تعيين قيمة لـ "SvIVX". مع بيرلز في المستقبل،
ومع ذلك، سيكون استخدام "SvIV_set" بدلاً من القيمة lvalue أكثر فعالية
التنازل عن "SvIVX".

باطلة SvIV_set(SV* sv, IV val)

SvLEN إرجاع حجم المخزن المؤقت للسلسلة في SV، دون تضمين أي جزء
يعزى إلى "SvOOK". انظر "سفكور".

سترلين سفلين (SV* sv)

SvLEN_set
قم بتعيين الطول الفعلي للسلسلة الموجودة في SV. راجع "SvIV_set".

باطلة SvLEN_set(SV* sv, STRLEN لين)

SvMAGIC_set
قم بتعيين قيمة المؤشر MAGIC في sv إلى val. راجع "SvIV_set".

باطلة SvMAGIC_set(SV* sv, MAGIC* val)

SvNIOK تقوم بإرجاع قيمة U32 تشير إلى ما إذا كان SV يحتوي على رقم أو عدد صحيح أو
مزدوج.

U32 سفنيوك (SV* سف)

SvNIOKp تُرجع قيمة U32 تشير إلى ما إذا كان SV يحتوي على رقم أو عدد صحيح أو
مزدوج. يتحقق من خاص جلسة. استخدم "SvNIOK" بدلاً من ذلك.

U32 SvNIOKp(SV* sv)

SvNIOK_off
يقوم بإلغاء ضبط حالة NV/IV لـ SV.

باطلة SvNIOK_off(SV* sv)

SvNOK تُرجع قيمة U32 تشير إلى ما إذا كان SV يحتوي على رقم مزدوج.

U32 SvNOK(SV* sv)

SvNOKp تُرجع قيمة U32 تشير إلى ما إذا كان SV يحتوي على رقم مزدوج. يتحقق من
خاص جلسة. استخدم "SvNOK" بدلاً من ذلك.

U32 SvNOKp(SV* sv)

SvNOK_off
يقوم بإلغاء ضبط حالة NV لـ SV.

باطلة SvNOK_off(SV* sv)

SvNOK_on
يخبر SV أنه مزدوج.

باطلة SvNOK_on(SV* sv)

SvNOK_only
يخبر SV بأنه مزدوج ويعطل كافة البتات OK الأخرى.

باطلة SvNOK_only(SV* sv)

SvNV قم بإجبار SV المعطى على مضاعفة وإعادته. راجع "SvNVx" للحصول على الإصدار الذي
يضمن تقييم SV مرة واحدة فقط.

نيفادا SvNV(SV* sv)

SvNVX تُرجع القيمة الأولية في فتحة NV الخاصة بـ SV، بدون عمليات التحقق أو التحويلات. فقط
استخدمه عندما تكون متأكدًا من صحة SvNOK. انظر أيضًا "SvNV()".

NV SvNVX(SV* sv)

يقوم SvNVx بإجبار SV المحدد على مضاعفة وإعادته. ضمانات لتقييم "SV" فقط
مرة واحدة. استخدم هذا فقط إذا كان "sv" تعبيرًا له آثار جانبية، وإلا فاستخدم
أكثر كفاءة "SvNV".

NV SvNVx(SV* sv)

SvNV_nomg
مثل "SvNV" ولكنه لا يعالج السحر.

نيفادا SvNV_nomg(SV* sv)

SvNV_set
قم بتعيين قيمة مؤشر NV في sv إلى val. راجع "SvIV_set".

باطلة SvNV_set(SV* sv, NV val)

SvOK تقوم بإرجاع قيمة U32 تشير إلى ما إذا كانت القيمة محددة أم لا. هذا فقط
ذات معنى بالنسبة للعددية.

U32 SvOK(SV* sv)

يقوم SvOOK بإرجاع U32 للإشارة إلى ما إذا كان المؤشر إلى المخزن المؤقت للسلسلة قد تم إزاحته. هذا
يتم استخدام hack داخليًا لتسريع عملية إزالة الأحرف من بداية ملف
SvPV. عندما يكون SvOOK صحيحًا، تكون بداية المخزن المؤقت للسلسلة المخصصة
في الواقع بايتات "SvOOK_offset()" قبل SvPVX. تم استخدام هذا الإزاحة ليتم تخزينه في
SvIVX، ولكن يتم تخزينه الآن ضمن قطعة الغيار للمخزن المؤقت.

U32 سفووك (SV* sv)

SvOOK_offset
يقرأ في ليون الإزاحة من SvPVX تعود إلى البداية الحقيقية للمخصص
المخزن المؤقت، والذي لن يكون صفرًا إذا تم استخدام "sv_chop" لإزالته بكفاءة
الأحرف من بداية المخزن المؤقت. يتم تنفيذه باعتباره ماكرو، والذي يأخذ
عنوان ال ليون، والذي يجب أن يكون من النوع "STRLEN". يقيم sv أكثر من مرة.
باكجات ليون إلى 0 إذا كانت "SvOOK(sv)" خاطئة.

باطلة SvOOK_offset(NN SV*sv, STRLEN لين)

SvPOK تقوم بإرجاع قيمة U32 تشير إلى ما إذا كان SV يحتوي على سلسلة أحرف.

U32 SvPOK(SV* sv)

SvPOKp تقوم بإرجاع قيمة U32 تشير إلى ما إذا كان SV يحتوي على سلسلة أحرف. الفحوصات
هيه خاص جلسة. استخدم "SvPOK" بدلاً من ذلك.

U32 SvPOKp(SV* sv)

SvPOK_off
يقوم بإلغاء ضبط حالة PV لـ SV.

باطلة SvPOK_off(SV* sv)

SvPOK_on
يخبر SV بأنه عبارة عن سلسلة.

باطلة SvPOK_on(SV* sv)

SvPOK_only
يخبر SV بأنه عبارة عن سلسلة ويعطل جميع البتات OK الأخرى. سوف تتحول أيضا
خارج حالة UTF-8.

باطل SvPOK_only(SV* sv)

SvPOK_only_UTF8
يخبر SV بأنها سلسلة ويعطل كافة البتات OK الأخرى، ويترك
حالة UTF-8 كما كانت.

باطلة SvPOK_only_UTF8(SV* sv)

SvPV يُرجع مؤشرًا إلى السلسلة في SV، أو نموذجًا مقيدًا من SV إذا كان
لا يحتوي SV على سلسلة. قد يقوم SV بتخزين الإصدار المقيد بشكل مؤقت
"سفبوك". يعالج السحر "الحصول على". سيتم تعيين المتغير "len" على طول
السلسلة (هذا ماكرو، لذا لا تستخدم &len). راجع أيضًا "SvPVx" للحصول على الإصدار
مما يضمن تقييم SV مرة واحدة فقط.

لاحظ أنه لا يوجد ضمان بأن القيمة المرجعة لـ "SvPV()" تساوي
"SvPVX(sv)"، أو أن "SvPVX(sv)" يحتوي على بيانات صالحة، أو أن المكالمات المتتالية إلى
سيُرجع "SvPV(sv)" نفس قيمة المؤشر في كل مرة. هذا يرجع إلى الطريقة
أنه يتم التعامل مع أشياء مثل التحميل الزائد والنسخ عند الكتابة. في هذه الحالات،
قد تشير قيمة الإرجاع إلى مخزن مؤقت مؤقت أو ما شابه. إذا كنت في حاجة على الاطلاق
أن يكون حقل SvPVX صالحًا (على سبيل المثال، إذا كنت تنوي الكتابة إليه)، فاطلع على ذلك
"SvPV_force".

شار* SvPV(SV* sv، STRLEN لين)

SvPVbyte
مثل "SvPV"، ولكنه يحول sv إلى تمثيل بايت أولاً إذا لزم الأمر.

شار* SvPVbyte(SV* sv, STRLEN لين)

SvPVbytex
مثل "SvPV"، ولكنه يحول sv إلى تمثيل بايت أولاً إذا لزم الأمر.
ضمانات لتقييم SV مرة واحدة فقط؛ استخدم "SvPVbyte" الأكثر كفاءة بخلاف ذلك.

شار* SvPVbytex(SV* sv, STRLEN لين)

SvPVbytex_force
مثل "SvPV_force"، ولكنه يحول sv إلى تمثيل بايت أولاً إذا لزم الأمر.
ضمانات لتقييم SV مرة واحدة فقط؛ استخدم "SvPVbyte_force" الأكثر كفاءة
غير ذلك.

شار* SvPVbytex_force(SV* sv, STRLEN لين)

SvPVbyte_force
مثل "SvPV_force"، ولكنه يحول sv إلى تمثيل بايت أولاً إذا لزم الأمر.

شار* SvPVbyte_force(SV* sv, STRLEN لين)

SvPVbyte_nolen
مثل "SvPV_nolen"، ولكنه يحول sv إلى تمثيل بايت أولاً إذا لزم الأمر.

شار* SvPVbyte_nolen(SV* sv)

SvPVutf8
مثل "SvPV"، ولكنه يحول sv إلى utf8 أولاً إذا لزم الأمر.

شار* SvPVutf8(SV* sv, STRLEN لين)

SvPVutf8x
مثل "SvPV"، ولكنه يحول sv إلى utf8 أولاً إذا لزم الأمر. ضمانات للتقييم
سانت مرة واحدة فقط؛ استخدم "SvPVutf8" الأكثر كفاءة بخلاف ذلك.

شار* SvPVutf8x(SV* sv, STRLEN لين)

SvPVutf8x_force
مثل "SvPV_force"، ولكنه يحول sv إلى utf8 أولاً إذا لزم الأمر. ضمانات ل
تقييم SV مرة واحدة فقط؛ استخدم "SvPVutf8_force" الأكثر كفاءة بخلاف ذلك.

شار* SvPVutf8x_force(SV* sv, STRLEN لين)

SvPVutf8_force
مثل "SvPV_force"، ولكنه يحول sv إلى utf8 أولاً إذا لزم الأمر.

شار* SvPVutf8_force(SV* sv, STRLEN لين)

SvPVutf8_nolen
مثل "SvPV_nolen"، ولكنه يحول sv إلى utf8 أولاً إذا لزم الأمر.

شار* SvPVutf8_nolen(SV* sv)

يقوم SvPVX بإرجاع مؤشر إلى السلسلة الفعلية في SV. يجب أن يحتوي SV على سلسلة.
قبل الإصدار 5.9.3، لم يكن من الآمن تنفيذ هذا الماكرو إلا إذا كان نوع SV >=
SVt_PV.

يُستخدم هذا أيضًا لتخزين اسم الروتين الفرعي الذي تم تحميله تلقائيًا في XS AUTOLOAD
نمط. راجع "التحميل التلقائي باستخدام XSUBs" في perlguts.

شار* SvPVX(SV* sv)

SvPVx إصدار من "SvPV" يضمن تقييم "sv" مرة واحدة فقط. استخدم هذا فقط إذا
"sv" هو تعبير له آثار جانبية، وإلا استخدم "SvPV" الأكثر كفاءة.

شار* SvPVx(SV* sv، STRLEN لين)

SvPV_force
مثل "SvPV" ولكنه سيجبر SV على احتواء سلسلة ("SvPOK")، وفقط a
سلسلة ("SvPOK_only")، عن طريق الخطاف أو المحتال. أنت بحاجة إلى القوة إذا كنت تريد ذلك
قم بتحديث "SvPVX" مباشرة. العمليات تحصل على السحر.

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

شار* SvPV_force(SV* sv, STRLEN لين)

SvPV_force_nomg
مثل "SvPV_force"، ولكن لا يتم الحصول على السحر.

شار* SvPV_force_nomg(SV* sv, STRLEN لين)

SvPV_nolen
مثل "SvPV" ولكنه لا يقوم بتعيين متغير الطول.

شار* SvPV_nolen(SV* sv)

SvPV_nomg
مثل "SvPV" ولكنه لا يعالج السحر.

شار* SvPV_nomg(SV* sv, STRLEN لين)

SvPV_nomg_nolen
مثل "SvPV_nolen" لكنه لا يعالج السحر.

شار* SvPV_nomg_nolen(SV* sv)

SvPV_set
ربما ليس هذا هو ما تريد استخدامه، ربما كنت تريد "sv_usepvn_flags"
أو "sv_setpvn" أو "sv_setpvs".

قم بتعيين قيمة مؤشر PV في "sv" إلى لغة Perl المخصصة "NUL" منتهية
سلسلة "فال". انظر أيضًا "SvIV_set".

تذكر تحرير المخزن المؤقت الكهروضوئي السابق. هناك أشياء كثيرة للتحقق. احذر
أن المؤشر الحالي قد يكون متورطًا في النسخ عند الكتابة أو أي ضرر آخر، لذلك
قم بإجراء "SvOOK_off(sv)" واستخدم "sv_force_normal" أو "SvPV_force" (أو تحقق من SvIsCOW
العلم) أولاً للتأكد من أن هذا التعديل آمن. ثم أخيرا، إذا لم يكن
البقرة، اتصل بـ "SvPV_free" لتحرير المخزن المؤقت الكهروضوئي السابق.

باطلة SvPV_set(SV* sv, char* val)

سفيرريفكنت
تُرجع قيمة العدد المرجعي للكائن.

U32 SvREFCNT(SV* sv)

SvREFCNT_dec
يقلل العدد المرجعي لـ SV المحدد. sv قد تكون فارغة.

باطلة SvREFCNT_dec(SV* sv)

SvREFCNT_dec_NN
مثل SvREFCNT_dec، ولكن لا يمكن استخدامه إلا إذا كنت تعرف ذلك sv هو ليس لاشيء. منذ نحن
لا يتعين عليك التحقق من NULLness، فهو أسرع وأصغر.

باطلة SvREFCNT_dec_NN(SV* sv)

SvREFCNT_inc
زيادة العدد المرجعي لـ SV المحدد، مما يؤدي إلى إرجاع SV.

كافة وحدات الماكرو SvREFCNT_inc* التالية هي إصدارات محسنة من SvREFCNT_inc،
ويمكن استبداله بـ SvREFCNT_inc.

SV* SvREFCNT_inc(SV* sv)

SvREFCNT_inc_NN
مثل SvREFCNT_inc، لكن لا يمكن استخدامه إلا إذا كنت تعرف ذلك sv هو ليس لاشيء. منذ نحن
لا يتعين عليك التحقق من NULLness، فهو أسرع وأصغر.

SV* SvREFCNT_inc_NN(SV* sv)

SvREFCNT_inc_simple
مثل SvREFCNT_inc، لكن يمكن استخدامه فقط مع التعبيرات التي ليس لها آثار جانبية.
نظرًا لأننا لا نحتاج إلى تخزين قيمة مؤقتة، فهذا أسرع.

SV* SvREFCNT_inc_simple(SV* sv)

SvREFCNT_inc_simple_NN
مثل SvREFCNT_inc_simple، ولكن لا يمكن استخدامه إلا إذا كنت تعرف ذلك sv هو ليس لاشيء.
نظرًا لأننا لا نحتاج إلى التحقق من NULLness، فهو أسرع وأصغر.

SV* SvREFCNT_inc_simple_NN(SV* sv)

SvREFCNT_inc_simple_void
مثل SvREFCNT_inc_simple، ولكن لا يمكن استخدامه إلا إذا لم تكن بحاجة إلى الإرجاع
قيمة. لا يحتاج الماكرو إلى إرجاع قيمة ذات معنى.

باطلة SvREFCNT_inc_simple_void(SV* sv)

SvREFCNT_inc_simple_void_NN
مثل SvREFCNT_inc، ولكن لا يمكن استخدامه إلا إذا لم تكن بحاجة إلى القيمة المرجعة، و
هل تعلم أن sv هو ليس لاشيء. لا يحتاج الماكرو إلى إرجاع معنى
القيمة، أو التحقق من NULLness، بحيث تكون أصغر وأسرع.

باطلة SvREFCNT_inc_simple_void_NN(SV* sv)

SvREFCNT_inc_void
مثل SvREFCNT_inc، ولكن لا يمكن استخدامه إلا إذا لم تكن بحاجة إلى القيمة المرجعة.
لا يحتاج الماكرو إلى إرجاع قيمة ذات معنى.

باطلة SvREFCNT_inc_void(SV* sv)

SvREFCNT_inc_void_NN
مثل SvREFCNT_inc، ولكن لا يمكن استخدامه إلا إذا لم تكن بحاجة إلى القيمة المرجعة، و
هل تعلم أن sv هو ليس لاشيء. لا يحتاج الماكرو إلى إرجاع معنى
القيمة، أو التحقق من NULLness، بحيث تكون أصغر وأسرع.

باطلة SvREFCNT_inc_void_NN(SV* sv)

يقوم SvROK باختبار ما إذا كانت SV عبارة عن عربة سكن متنقلة.

U32 SvROK(SV* sv)

SvROK_off
يقوم بإلغاء تحديد حالة RV لـ SV.

باطل SvROK_off(SV* sv)

SvROK_on
يخبر SV أنها عربة سكن متنقلة.

باطلة SvROK_on(SV* sv)

يقوم SvRV بإلغاء الإشارة إلى RV لإرجاع SV.

SV* SvRV(SV* sv)

SvRV_set
قم بتعيين قيمة مؤشر RV في sv إلى val. راجع "SvIV_set".

باطلة SvRV_set(SV* sv, SV* val)

SvSTASH إرجاع مخبأ SV.

HV* سفستاش(SV* سف)

SvSTASH_set
قم بتعيين قيمة مؤشر STASH في sv إلى val. راجع "SvIV_set".

باطلة SvSTASH_set(SV* sv, HV* val)

SvTAINT يلوث SV إذا تم تمكين التشويه، وإذا تم إدخال بعض البيانات في التعبير الحالي
ملوث - عادةً ما يكون متغيرًا، ولكن من المحتمل أيضًا أن يكون مدخلات ضمنية مثل الإعدادات المحلية
إعدادات. يقوم "SvTAINT" بنشر هذا التلوث إلى مخرجات التعبير
بطريقة متشائمة. أي دون الالتفات إلى أي منها على وجه التحديد
تتأثر المخرجات بالمدخلات.

باطلة SvTAINT(SV* sv)

SvTAINTED
يتحقق لمعرفة ما إذا كان SV ملوثًا. إرجاع TRUE إذا كان كذلك، وإرجاع FALSE إذا لم يكن كذلك.

منطقي SvTAINTED(SV* sv)

SvTAINTED_off
ينظف SV. يكون جدا كن حذرًا مع هذا الروتين، لأنه يسبب قصرًا في بعض الدوائر
ميزات الأمان الأساسية لـ Perl. يجب على مؤلفي وحدة XS عدم استخدام هذا
الوظيفة ما لم يفهموا تمامًا جميع الآثار المترتبة على ذلك دون قيد أو شرط
عدم تشويه القيمة. يجب أن يتم إزالة التلوث بطريقة بيرل القياسية، عبر
تعبير عادي تم إعداده بعناية، بدلاً من إزالة المتغيرات بشكل مباشر.

باطلة SvTAINTED_off(SV* sv)

SvTAINTED_on
وضع علامة على SV على أنه ملوث إذا تم تمكين التلوث.

باطلة SvTAINTED_on(SV* sv)

SvTRUE تقوم بإرجاع قيمة منطقية تشير إلى ما إذا كان Perl سيقيم SV على أنه صحيح أم خطأ.
يرى SvOK () لاختبار محدد/غير محدد. يتعامل مع سحر "الحصول على" ما لم يكن العدد العددي
بالفعل SvPOK أو SvIOK أو SvNOK (الأعلام العامة، وليس الخاصة).

منطقي SvTRUE(SV* sv)

SvTRUE_nomg
إرجاع قيمة منطقية تشير إلى ما إذا كان Perl سيقيم SV على أنه صحيح أم خطأ.
يرى SvOK () لاختبار محدد/غير محدد. لا يتعامل مع سحر "الحصول على".

منطقي SvTRUE_nomg(SV* sv)

SvTYPE يُرجع نوع SV. انظر "svtype".

svtype SvTYPE(SV* sv)

SvUOK تقوم بإرجاع قيمة منطقية تشير إلى ما إذا كان SV يحتوي على عدد صحيح يجب أن يكون
يتم تفسيرها على أنها غير موقعة. عدد صحيح غير سالب تقع قيمته ضمن النطاق
يمكن وضع علامة على كل من IV وUV على أنها إما SvUOK أو SVIOK.

منطقي SvUOK(SV* sv)

ترقية
يستخدم لترقية SV إلى نموذج أكثر تعقيدًا. يستخدم "sv_upgrade" لتنفيذ
الترقية إذا لزم الأمر. انظر "svtype".

باطلة SvUPGRADE (SV * sv، نوع svtype)

SvUTF8 يُرجع قيمة U32 تشير إلى حالة UTF-8 لـ SV. إذا تم إعداد الأمور
بشكل صحيح، يشير هذا إلى ما إذا كان ملف SV يحتوي على بيانات مشفرة UTF-8 أم لا. أنت
يجب استخدام هذا بعد مكالمة ل سفبف () أو أحد متغيراته، في حالة وجود أي اتصال ل
يؤدي التحميل الزائد للسلسلة إلى تحديث العلامة الداخلية.

إذا كنت تريد أن تأخذ في الاعتبار عملية البايتات، فاستخدم "DO_UTF8" بدلاً من ذلك.

U32 SvUTF8(SV* sv)

SvUTF8_off
إلغاء تعيين حالة UTF-8 لملف SV (لا يتم تغيير البيانات، فقط العلامة). لا
استخدم بشكل تافه.

باطلة SvUTF8_off(SV *sv)

SvUTF8_on
قم بتشغيل حالة UTF-8 لـ SV (لا يتم تغيير البيانات، فقط العلامة). يفعل
لا تستخدم بشكل تافه.

باطلة SvUTF8_on(SV *sv)

يقوم SvUV بإجبار SV المعطى على عدد صحيح غير موقّع وإعادته. راجع "SvUVx" للتعرف على أ
الإصدار الذي يضمن تقييم SV مرة واحدة فقط.

الأشعة فوق البنفسجية SvUV(SV* sv)

SvUVX تقوم بإرجاع القيمة الأولية في فتحة الأشعة فوق البنفسجية الخاصة بـ SV، بدون عمليات التحقق أو التحويلات. فقط
استخدمه عندما تكون متأكدًا من صحة SvIOK. انظر أيضًا "SvUV()".

الأشعة فوق البنفسجية SvUVX(SV* sv)

يقوم SvUVx بإجبار SV المعطى على عدد صحيح غير موقّع وإعادته. ضمانات ل
تقييم "SV" مرة واحدة فقط. استخدم هذا فقط إذا كان "sv" عبارة عن تعبير ذو جانب
التأثيرات، وإلا استخدم "SvUV" الأكثر كفاءة.

الأشعة فوق البنفسجية SvUVx(SV* sv)

SvUV_nomg
مثل "SvUV" لكنه لا يعالج السحر.

الأشعة فوق البنفسجية SvUV_nomg(SV* sv)

SvUV_set
اضبط قيمة مؤشر الأشعة فوق البنفسجية بـ sv إلى val. راجع "SvIV_set".

باطلة SvUV_set(SV* sv، UV val)

SvVOK يُرجع قيمة منطقية تشير إلى ما إذا كان SV يحتوي على سلسلة v.

منطقي SvVOK(SV* sv)

sv_catpvn_nomg
مثل "sv_catpvn" لكنه لا يعالج السحر.

باطلة sv_catpvn_nomg(SV* sv, const char* ptr,
سترلين لين)

sv_catpv_nomg
مثل "sv_catpv" لكنه لا يعالج السحر.

باطلة sv_catpv_nomg(SV* sv, const char* ptr)

sv_catsv_nomg
مثل "sv_catsv" لكنه لا يعالج السحر.

باطلة sv_catsv_nomg (SV * dsv، SV * ssv)

sv_derived_from
تمامًا مثل "sv_derived_from_pv"، لكنه لا يأخذ معلمة "flags".

منطقي sv_derived_from(SV* sv, const char *const name)

sv_derived_from_pv
تمامًا مثل "sv_derived_from_pvn"، ولكنه يأخذ سلسلة منتهية بقيمة فارغة بدلاً من
زوج سلسلة / طول.

منطقي sv_derived_from_pv(SV* sv،
حرف ثابت * اسم ثابت،
أعلام U32)

sv_derived_from_pvn
إرجاع قيمة منطقية تشير إلى ما إذا كان SV مشتقًا من الفئة المحددة at
هيه C مستوى. للتحقق من الاشتقاق على مستوى Perl، قم باستدعاء "isa()" كلغة Perl عادية
الأسلوب.

حاليًا ، القيمة المهمة الوحيدة لـ "الإشارات" هي SVf_UTF8.

منطقي sv_derived_from_pvn(SV* sv،
حرف ثابت * اسم ثابت،
كونست سترلين لين، أعلام U32)

sv_derived_from_sv
تمامًا مثل "sv_derived_from_pvn"، ولكنه يأخذ سلسلة الاسم في شكل SV
بدلاً من زوج سلسلة / طول.

منطقي sv_derived_from_sv(SV* sv, SV *namesv,
أعلام U32)

sv_does مثل "sv_does_pv"، لكنه لا يأخذ معلمة "flags".

منطقي sv_does(SV* sv, const char *اسم ثابت)

sv_does_pv
مثل "sv_does_sv"، ولكنه يأخذ سلسلة منتهية بقيمة فارغة بدلاً من SV.

bool sv_does_pv(SV* sv, const char *const name,
أعلام U32)

sv_does_pvn
مثل "sv_does_sv"، ولكنه يأخذ زوج سلسلة/طول بدلاً من SV.

bool sv_does_pvn(SV* sv, const char *const name,
كونست سترلين لين، أعلام U32)

sv_does_sv
تقوم بإرجاع قيمة منطقية تشير إلى ما إذا كان SV يقوم بدور محدد ومسمى. ال
يمكن أن يكون SV كائن Perl أو اسم فئة Perl.

منطقي sv_does_sv(SV* sv، SV*namesv، أعلام U32)

sv_report_used
تفريغ محتويات جميع ملفات SV التي لم يتم تحريرها بعد (مساعدة التصحيح).

باطلة sv_report_used ()

sv_setsv_nomg
مثل "sv_setsv" ولكنه لا يعالج السحر.

باطلة sv_setsv_nomg (SV * dsv، SV * ssv)

sv_utf8_upgrade_nomg
مثل sv_utf8_upgrade، لكنه لا يفعل السحر على "sv".

STRLEN sv_utf8_upgrade_nomg(NN SV *sv)

SV-الجسم توزيع


look_like_number
اختبر ما إذا كان محتوى SV يبدو كرقم (أو هو رقم). "المدفعية" و
يتم التعامل مع "Infinity" كأرقام (وبالتالي لن يتم إصدار تحذير غير رقمي)، حتى
إذا كان لديك في ل() لا يزعجهم. يتم تجاهل الحصول على السحر.

I32 look_like_number(SV *const sv)

newRV_noinc
إنشاء غلاف RV لـ SV. العدد المرجعي لـ SV الأصلي هو ليس
زيادة.

SV* newRV_noinc(SV *const tmpRef)

newSV ينشئ ملف SV جديدًا. تشير معلمة "len" غير الصفرية إلى عدد بايتات
مساحة السلسلة المخصصة مسبقًا التي يجب أن تتوفر في SV. بايت إضافي لـ "NUL" زائدة
محجوز أيضًا. (لم يتم تعيين SvPOK لـ SV حتى إذا كانت مساحة السلسلة كذلك
المخصصة.) تم تعيين العدد المرجعي لـ SV الجديد على 1.

في 5.9.3، نيوسف () يحل محل كبار السن نيوسف() API، ويسقط المعلمة الأولى،
x، أداة مساعدة لتصحيح الأخطاء تسمح للمتصلين بالتعريف عن أنفسهم. وكانت هذه المساعدات
تم استبداله بخيار إنشاء جديد، PERL_MEM_LOG (راجع "PERL_MEM_LOG" في
بيرلهاكتيبس). لا تزال واجهة برمجة التطبيقات الأقدم موجودة للاستخدام في دعم وحدات XS
بيرل أقدم.

SV* newSV(const STRLEN len)

newSVhek
ينشئ SV جديدًا من بنية مفتاح التجزئة. وسوف تولد العددية تلك النقطة
إلى جدول السلسلة المشترك حيثما أمكن ذلك. تقوم بإرجاع SV جديد (غير محدد) إذا كان
هيك فارغة.

SV* نيوسفهيك (كونست هيك *كونست هيك)

newSViv ينشئ ملف SV جديدًا وينسخ عددًا صحيحًا فيه. العدد المرجعي لـ SV هو
تعيين إلى 1.

SV* newSViv(const IV i)

newSVnv ينشئ ملف SV جديدًا وينسخ قيمة الفاصلة العائمة فيه. العد المرجعي
بالنسبة لـ SV تم ضبطه على 1.

SV* newSVnv(const NV n)

newSVpv ينشئ ملف SV جديدًا وينسخ سلسلة (والتي قد تحتوي على أحرف "NUL" ("\0"))
بداخله. يتم تعيين العدد المرجعي لـ SV على 1. إذا كانت قيمة "len" تساوي صفرًا، فسيقوم Perl بذلك
حساب الطول باستخدام سترلين ()، (مما يعني أنه إذا استخدمت هذا الخيار، فإن "s"
لا يمكن تضمين أحرف "NUL" ويجب أن تحتوي على بايت إنهاء "NUL").

لتحقيق الكفاءة، فكر في استخدام "newSVpvn" بدلاً من ذلك.

SV* newSVpv(const char *const s, const STRLEN len)

newSVpvf
يقوم بإنشاء ملف SV جديد وتهيئته باستخدام السلسلة المنسقة مثل "sprintf".

SV* newSVpvf(const char *const pat,...)

newSVpvn
ينشئ ملف SV جديدًا وينسخ سلسلة فيه، والتي قد تحتوي على أحرف "NUL".
("\0") والبيانات الثنائية الأخرى. تم تعيين العدد المرجعي لـ SV على 1. ملاحظة
أنه إذا كانت قيمة "len" صفرًا، فسيقوم Perl بإنشاء سلسلة ذات طول صفري (Perl). أنت
مسؤول عن التأكد من أن المخزن المؤقت المصدر يبلغ طوله "len" بايت على الأقل. لو
الوسيطة "المخزن المؤقت" هي NULL، ولن يتم تعريف SV الجديد.

SV* newSVpvn(const char *const s, const STRLEN len)

newSVpvn_flags
إنشاء ملف SV جديد ونسخ سلسلة (والتي قد تحتوي على أحرف "NUL" ("\0"))
بداخله. تم تعيين العدد المرجعي لـ SV على 1. لاحظ أنه إذا كانت قيمة "len" تساوي صفرًا،
سيقوم Perl بإنشاء سلسلة ذات طول صفري. أنت مسؤول عن التأكد من أن
السلسلة المصدر بطول "len" بايت على الأقل. إذا كانت الوسيطة "s" فارغة فإن الجديد
سوف يكون SV غير محدد. بتات العلم الوحيدة المقبولة حاليًا هي "SVf_UTF8" و
"SVs_TEMP". إذا تم تعيين "SVs_TEMP"، فسيتم استدعاء "sv_2mortal()" على النتيجة
قبل العودة. إذا تم تعيين "SVf_UTF8"، فسيتم اعتبار "s" موجودًا في UTF-8 و
سيتم تعيين علامة "SVf_UTF8" على ملف SV الجديد. يعد "newSVpvn_utf8()" وسيلة مريحة
المجمع لهذه الوظيفة، كما هو محدد

#define newSVpvn_utf8(s, len, u)
newSVpvn_flags((s)، (len)، (u) ؟ SVf_UTF8 : 0)

SV* newSVpvn_flags(const char *const s,
كونست سترلين لين,
أعلام const U32)

newSVpvn_share
يقوم بإنشاء SV جديد مع الإشارة إلى SvPVX_const إلى سلسلة مشتركة في السلسلة
طاولة. إذا لم تكن السلسلة موجودة بالفعل في الجدول، فسيتم إنشاؤها أولاً.
يقوم بتشغيل علامة SvIsCOW (أو للقراءة فقط والمزيفة في الإصدار 5.16 والإصدارات الأقدم). إذا
معلمة "التجزئة" ليست صفرية، ويتم استخدام هذه القيمة؛ وإلا يتم حساب التجزئة.
يمكن استرداد تجزئة السلسلة لاحقًا من SV باستخدام "SvSHARED_HASH()"
دقيق. الفكرة هنا هي أنه يتم استخدام جدول السلسلة لمفاتيح التجزئة المشتركة
ستحتوي هذه السلاسل على SvPVX_const == HeKEY وسيتجنب البحث عن التجزئة السلسلة
يقارن.

SV* newSVpvn_share(const char* s, I32 len, U32 hash)

newSVpvs
مثل "newSVpvn"، ولكنه يأخذ سلسلة حرفية منتهية بـ "NUL" بدلاً من a
زوج سلسلة / طول.

SV* newSVpvs(const char* s)

newSVpvs_flags
مثل "newSVpvn_flags"، ولكنه يأخذ سلسلة حرفية منتهية بـ "NUL" بدلاً من سلسلة
زوج سلسلة / طول.

SV* newSVpvs_flags(const char* s، أعلام U32)

newSVpvs_share
مثل "newSVpvn_share"، ولكنه يأخذ سلسلة حرفية منتهية بـ "NUL" بدلاً من سلسلة
زوج السلسلة/الطول ويحذف معلمة التجزئة.

SV* newSVpvs_share(const char* s)

newSVpv_share
مثل "newSVpvn_share"، ولكنه يأخذ سلسلة منتهية بـ "NUL" بدلاً من a
زوج سلسلة / طول.

SV* newSVpv_share(const char* s, U32 hash)

newSVrv ينشئ SV جديدًا للمركبة RV الموجودة، "rv"، للإشارة إليها. إذا لم تكن "rv" عبارة عن عربة سكن متنقلة
ثم سيتم ترقيته إلى واحد. إذا كان "اسم الفئة" غير فارغ، فسيكون SV الجديد كذلك
تبارك في الحزمة المحددة. يتم إرجاع SV الجديد ومرجعه
العدد هو 1. العدد المرجعي 1 مملوك لـ "rv".

SV* نيوSVrv(SV *const rv،
const char * اسم فئة const)

newSVsv ينشئ ملف SV جديدًا وهو نسخة طبق الأصل من ملف SV الأصلي. (الاستخدامات
"sv_setsv".)

SV* newSVsv(SV *الثابت القديم)

newSVuv ينشئ ملف SV جديدًا وينسخ عددًا صحيحًا غير موقّع فيه. العدد المرجعي ل
تم ضبط SV على 1.

SV* newSVuv(const UV u)

newSV_type
إنشاء SV جديد، من النوع المحدد. العدد المرجعي لـ SV الجديد هو
تعيين إلى 1.

SV* newSV_type(نوع const svtype)

sv_2bool
يتم استخدام هذا الماكرو فقط بواسطة sv_true() أو ما يعادله الكلي، وفقط إذا كان
وسيطة الأخير ليست SvPOK أو SvIOK أو SvNOK. يستدعي sv_2bool_flags مع
علامة SV_GMAGIC.

منطقي sv_2bool(SV *const sv)

sv_2bool_flags
يتم استخدام هذه الوظيفة فقط من قبل sv_true() والأصدقاء، وفقط إذا كان الأخير
الوسيطة ليست SvPOK أو SvIOK أو SvNOK. إذا كانت الأعلام تحتوي على SV_GMAGIC، إذن
يفعل mg_get() لأول مرة.

منطقي sv_2bool_flags(SV *sv، أعلام I32)

sv_2cv باستخدام مناورات مختلفة، حاول الحصول على سيرة ذاتية من SV؛ بالإضافة إلى ذلك، حاول إذا كان ذلك ممكنا
اضبط *st و*gvp على المخبأ وGV المرتبط به. الأعلام الموجودة في "lref" هي
تم التمرير إلى gv_fetchsv.

السيرة الذاتية* sv_2cv(SV* sv, HV **const st, GV **const gvp,
ثابت I32 lref)

sv_2io باستخدام مناورات مختلفة، حاول الحصول على إدخال/إخراج من SV: فتحة الإدخال/الإخراج إذا كانت GV؛ أو
النتيجة العودية إذا كنا عربة سكن متنقلة؛ أو فتحة الإدخال والإخراج للرمز الذي يحمل اسم
PV إذا كنا سلسلة.

يتم تجاهل سحر 'Get' عند تمرير sv، ولكن سيتم استدعاؤه على "SvRV(sv)" إذا كان sv
هي عربة سكن متنقلة.

IO* sv_2io(SV *const sv)

sv_2iv_flags
قم بإرجاع القيمة الصحيحة لـ SV، وإجراء أي تحويل ضروري للسلسلة. لو
تتضمن الأعلام SV_GMAGIC، ولا mg_get() أولاً. تستخدم عادة عن طريق
وحدات الماكرو "SvIV(sv)" و"SvIVx(sv)".

IV sv_2iv_flags(SV *const sv، أعلام const I32)

sv_2mortal
وضع علامة على SV موجود على أنه مميت. سيتم تدمير SV "قريبًا" إما بواسطة
مكالمة صريحة إلى FREETMPS، أو عن طريق مكالمة ضمنية في أماكن مثل البيان
الحدود. سفتيمب () تم تشغيله مما يعني أنه يمكن تشغيل المخزن المؤقت لسلسلة SV
"مسروق" إذا تم نسخ هذا SV. راجع أيضًا "sv_newmortal" و"sv_mortalcopy".

SV* sv_2mortal(SV *const sv)

sv_2nv_flags
قم بإرجاع القيمة العددية لـ SV، وإجراء أي تحويل ضروري للسلسلة أو الأعداد الصحيحة.
إذا كانت العلامات تتضمن SV_GMAGIC، فسيتم إجراء ذلك mg_get() أولاً. تستخدم عادة عن طريق
وحدات الماكرو "SvNV(sv)" و"SvNVx(sv)".

NV sv_2nv_flags(SV *const sv، أعلام const I32)

sv_2pvbyte
قم بإرجاع مؤشر إلى تمثيل SV المشفر بالبايت، وقم بتعيين *lp عليه
طول. قد يتسبب في خفض تصنيف SV من UTF-8 كأثر جانبي.

يتم الوصول إليه عادةً عبر الماكرو "SvPVbyte".

شار* sv_2pvbyte(SV *sv, STRLEN *const lp)

sv_2pvutf8
قم بإرجاع مؤشر إلى تمثيل SV المشفر بـ UTF-8، ثم قم بتعيين *lp إلى ملف SV
طول. قد يتسبب في ترقية SV إلى UTF-8 كأثر جانبي.

يتم الوصول إليه عادةً عبر الماكرو "SvPVutf8".

شار* sv_2pvutf8(SV *sv, STRLEN *const lp)

sv_2pv_flags
يُرجع مؤشرًا إلى قيمة سلسلة SV، ويضبط *lp على طوله. لو
تتضمن الأعلام SV_GMAGIC، ولا mg_get() أولاً. يُكره sv على سلسلة if
ضروري. يتم استدعاؤه عادةً عبر الماكرو "SvPV_flags". "sv_2pv ()" و
عادةً ما ينتهي الأمر بـ "sv_2pv_nomg" هنا أيضًا.

شار* sv_2pv_flags(SV *const sv, STRLEN *const lp,
أعلام const I32)

sv_2uv_flags
قم بإرجاع القيمة الصحيحة غير الموقعة لـ SV، وإجراء أي تحويل ضروري للسلسلة.
إذا كانت العلامات تتضمن SV_GMAGIC، فسيتم إجراء ذلك mg_get() أولاً. تستخدم عادة عن طريق
وحدات الماكرو "SvUV(sv)" و"SvUVx(sv)".

الأشعة فوق البنفسجية sv_2uv_flags(SV *const sv، أعلام const I32)

sv_backoff
إزالة أي إزاحة السلسلة. يجب عليك عادةً استخدام برنامج تضمين الماكرو "SvOOK_off".
بدلا من ذلك.

إنت sv_backoff(SV *const sv)

sv_bless
يبارك SV في حزمة محددة. يجب أن تكون SV عبارة عن عربة سكن متنقلة. يجب أن تكون الحزمة
يتم تحديده بواسطة مخبأه (راجع "gv_stashpv()"). العدد المرجعي لـ SV هو
غير متأثر.

SV* sv_bless(SV *const sv, HV *const خبأ)

sv_catpv
يسلسل السلسلة المنتهية بـ "NUL" في نهاية السلسلة الموجودة فيها
القديس. إذا كان SV يحتوي على حالة UTF-8، فيجب أن تكون البايتات الملحقة كذلك
UTF-8 صالح. يتعامل مع سحر "الحصول على" ولكن ليس سحر "الضبط". راجع "sv_catpv_mg".

باطلة sv_catpv (SV *const sv، const char* ptr)

sv_catpvf
يعالج وسيطاته مثل "sprintf" ويلحق الإخراج المنسق بملف SV.
إذا كانت البيانات الملحقة تحتوي على أحرف "عريضة" (بما في ذلك، على سبيل المثال لا الحصر،
SVs ذات UTF-8 PV منسقة بـ %s، والأحرف > 255 منسقة بـ %c)،
قد تتم ترقية SV الأصلي إلى UTF-8. يتعامل مع سحر "الحصول على" ولكن ليس "ضبط"
سحر. راجع "sv_catpvf_mg". إذا كان SV الأصلي هو UTF-8، فيجب أن يكون النمط كذلك
UTF-8 صالح؛ إذا كان SV الأصلي عبارة عن بايت، فيجب أن يكون النمط كذلك.

باطلة sv_catpvf (SV *const sv، const char *const pat،
...)

sv_catpvf_mg
مثل "sv_catpvf"، ولكنه يتعامل أيضًا مع سحر "set".

باطلة sv_catpvf_mg(SV *const sv،
const char *const pat، ...)

sv_catpvn
يسلسل السلسلة في نهاية السلسلة الموجودة في SV. "لين"
يشير إلى عدد البايتات المراد نسخها. إذا تم تعيين حالة SV على UTF-8، فسيتم تعيين حالة
يجب أن تكون وحدات البايت الملحقة صالحة لـ UTF-8. يتعامل مع سحر "الحصول على" ولكن ليس سحر "الضبط".
راجع "sv_catpvn_mg".

باطلة sv_catpvn(SV *dsv, const char *sstr, STRLEN len)

sv_catpvn_flags
يسلسل السلسلة في نهاية السلسلة الموجودة في SV. "لين"
يشير إلى عدد البايتات المراد نسخها.

افتراضيًا، يُفترض أن تكون السلسلة المُلحقة صالحة باستخدام UTF-8 إذا كان SV يحتوي على
مجموعة حالة UTF-8، وسلسلة من البايتات بخلاف ذلك. يمكن للمرء أن يجبر الملحق
السلسلة التي سيتم تفسيرها على أنها UTF-8 من خلال توفير علامة "SV_CATUTF8" وكوحدات بايت
عن طريق توفير علامة "SV_CATBYTES"؛ سيكون SV أو السلسلة الملحقة
تمت ترقيته إلى UTF-8 إذا لزم الأمر.

إذا كانت "الأعلام" تحتوي على مجموعة البت "SV_SMAGIC"، فسيتم تعيين "mg_set" على "dsv" بعد ذلك إذا
ملائم. يتم تنفيذ "sv_catpvn" و"sv_catpvn_nomg" فيما يتعلق بهذا
وظيفة.

باطلة sv_catpvn_flags(SV *const dstr,
كونست شار *sstr,
كونست سترلين لين,
أعلام const I32)

sv_catpvs
مثل "sv_catpvn"، ولكنه يأخذ سلسلة حرفية بدلاً من زوج سلسلة/طول.

باطلة sv_catpvs(SV* sv, const char* s)

sv_catpvs_flags
مثل "sv_catpvn_flags"، ولكنه يأخذ سلسلة حرفية منتهية بـ "NUL" بدلاً من سلسلة
زوج سلسلة / طول.

باطلة sv_catpvs_flags(SV* sv, const char* s,
أعلام I32)

sv_catpvs_mg
مثل "sv_catpvn_mg"، ولكنه يأخذ سلسلة حرفية بدلاً من زوج سلسلة/طول.

باطلة sv_catpvs_mg(SV* sv, const char* s)

sv_catpvs_nomg
مثل "sv_catpvn_nomg"، ولكنه يأخذ سلسلة حرفية بدلاً من زوج سلسلة/طول.

باطلة sv_catpvs_nomg(SV* sv, const char* s)

sv_catpv_flags
يسلسل السلسلة المنتهية بـ "NUL" في نهاية السلسلة الموجودة فيها
القديس. إذا كان SV يحتوي على حالة UTF-8، فيجب أن تكون البايتات الملحقة كذلك
UTF-8 صالح. إذا كانت "الأعلام" تحتوي على مجموعة البت "SV_SMAGIC"، فسيتم تعيين "mg_set" على
تعديل SV إذا كان ذلك مناسبًا.

باطلة sv_catpv_flags(SV *dstr، const char *sstr،
أعلام const I32)

sv_catpv_mg
مثل "sv_catpv"، ولكنه يتعامل أيضًا مع سحر "set".

باطلة sv_catpv_mg(SV *const sv، const char *const ptr)

sv_catsv
يسلسل السلسلة من SV "ssv" إلى نهاية السلسلة في SV "dsv". لو
"ssv" فارغ، ولا يفعل شيئًا؛ خلاف ذلك يعدل فقط "DSV". يعالج السحر "الحصول على".
في كلا الطرازين SVs، لكن لا يوجد سحر "محدد". راجع "sv_catsv_mg" و"sv_catsv_nomg".

باطلة sv_catsv (SV *dstr، SV *sstr)

sv_catsv_flags
يسلسل السلسلة من SV "ssv" إلى نهاية السلسلة في SV "dsv". لو
"ssv" فارغ، ولا يفعل شيئًا؛ خلاف ذلك يعدل فقط "DSV". إذا كانت "الأعلام" تشمل
مجموعة البت "SV_GMAGIC"، ستستدعي "mg_get" على كلا SVs إذا كان ذلك مناسبًا. إذا "الأعلام"
تضمين "SV_SMAGIC"، وسيتم استدعاء "mg_set" على SV المعدل بعد ذلك، إذا
ملائم. تم تنفيذ "sv_catsv" و"sv_catsv_nomg" و"sv_catsv_mg" في
شروط هذه الوظيفة.

باطلة sv_catsv_flags(SV *const dsv، SV *const ssv،
أعلام const I32)

sv_chop إزالة فعالة للأحرف من بداية المخزن المؤقت للسلسلة.
يجب أن يكون SvPOK(sv)، أو على الأقل SvPOKp(sv)، صحيحًا ويجب أن يكون "ptr" مؤشرًا إلى
في مكان ما داخل المخزن المؤقت للسلسلة. يصبح "ptr" الحرف الأول من ملف
سلسلة معدلة. يستخدم "OOK الإختراق". عند العودة، فقط SvPOK(sv) وSvPOKp(sv)
بين الأعلام موافق سيكون صحيحا.

احذر: بعد إرجاع هذه الوظيفة، قد لا يشير "ptr" وSvPVX_const(sv) إلى
لنفس قطعة البيانات.

التشابه المؤسف بين اسم هذه الوظيفة واسم "تقطيع" بيرل
المشغل هو من قبيل الصدفة تماما. تعمل هذه الوظيفة من اليسار؛ "يقطع"
يعمل من اليمين.

باطلة sv_chop (SV *const sv، const char *const ptr)

sv_clear
قم بمسح SV: اتصل بأي مدمرات، وقم بتحرير أي ذاكرة يستخدمها الجسم، ثم قم بتحريرها
الجسم نفسه. رأس SV هو ليس تم تحريره، على الرغم من أن نوعه تم ضبطه على كل الأرقام 1
بحيث لا يُفترض عن غير قصد أنه حي أثناء الدمار العالمي
إلخ. يجب استدعاء هذه الوظيفة فقط عندما تكون قيمة REFCNT صفرًا. معظم الوقت
ستحتاج إلى الاتصال بـ "sv_free()" (أو مجمع الماكرو الخاص به "SvREFCNT_dec") بدلاً من ذلك.

باطلة sv_clear(SV *const orig_sv)

sv_cmp يقارن السلاسل في ملفين SVs. تُرجع -1 أو 0 أو 1 للإشارة إلى ما إذا كان
السلسلة الموجودة في "sv1" أقل من السلسلة الموجودة في "sv2" أو تساويها أو أكبر منها. يكون
UTF-8 و"استخدام البايتات" على دراية، تصبح المقابض سحرية، وستجبر وسيطاتها على ذلك
سلاسل إذا لزم الأمر. راجع أيضًا "sv_cmp_locale".

I32 sv_cmp(SV *const sv1، SV *const sv2)

sv_cmp_flags
يقارن السلاسل في اثنين من SVs. تُرجع -1 أو 0 أو 1 للإشارة إلى ما إذا كان
السلسلة الموجودة في "sv1" أقل من السلسلة الموجودة في "sv2" أو تساويها أو أكبر منها. يكون
UTF-8 و"استخدام البايتات" مدركان وسيجبران وسائطهما على السلاسل إذا لزم الأمر. لو
تتضمن الأعلام SV_GMAGIC، وهي تتعامل مع السحر. أنظر أيضا
"sv_cmp_locale_flags".

I32 sv_cmp_flags(SV *const sv1, SV *const sv2,
أعلام const U32)

sv_cmp_locale
يقارن السلاسل في ملفي SVs بطريقة تتعرف على الإعدادات المحلية. هو UTF-8 و"استخدام".
نظرًا لإدراك البايتات، تصبح المقابض سحرية، وستجبر وسائطها على السلاسل إذا لزم الأمر.
انظر أيضًا "sv_cmp".

I32 sv_cmp_locale(SV *const sv1، SV *const sv2)

sv_cmp_locale_flags
يقارن السلاسل في ملفي SVs بطريقة تتعرف على الإعدادات المحلية. هو UTF-8 و"استخدام".
بايتات على علم بها وسوف تُجبر وسائطها على السلاسل إذا لزم الأمر. إذا كانت الأعلام
تحتوي على SV_GMAGIC، فهي تتعامل مع السحر. راجع أيضًا "sv_cmp_flags".

I32 sv_cmp_locale_flags(SV *const sv1,
إس في *كونست sv2,
أعلام const U32)

sv_collxfrm
يؤدي هذا إلى استدعاء "sv_collxfrm_flags" مع علامة SV_GMAGIC. راجع "sv_collxfrm_flags".

شار* sv_collxfrm(SV *const sv, STRLEN *const nxp)

sv_collxfrm_flags
قم بإضافة سحر Collate Transform إلى ملف SV إذا لم يكن موجودًا بالفعل. إذا كانت الأعلام
يحتوي على SV_GMAGIC، ويتعامل مع السحر.

قد يحمل أي متغير عددي سحر PERL_MAGIC_collxfrm الذي يحتوي على العدد العددي
بيانات المتغير، ولكن تم تحويلها إلى تنسيق بحيث تكون الذاكرة عادية
يمكن استخدام المقارنة لمقارنة البيانات وفقًا لإعدادات اللغة.

شار* sv_collxfrm_flags(SV *const sv,
سترلين *كونست نكسب،
أعلام ثابتة I32)

sv_copypv_flags
تنفيذ sv_copypv وsv_copypv_nomg. تحصل المكالمات على إشارات سحرية إذا تم تضمينها
SV_GMAGIC.

باطلة sv_copypv_flags(SV *const dsv، SV *const ssv،
أعلام const I32)

sv_copypv_nomg
مثل sv_copypv، لكنه لا يستدعي الحصول على السحر أولاً.

باطلة sv_copypv_nomg(SV *const dsv، SV *const ssv)

sv_dec التخفيض التلقائي للقيمة في SV، وإجراء تحويل السلسلة إلى رقمي إذا
ضروري. يعالج سحر "الحصول على" والتحميل الزائد للمشغل.

باطلة sv_dec(SV *const sv)

sv_dec_nomg
التخفيض التلقائي للقيمة في SV، وإجراء تحويل السلسلة إلى رقمي إذا
ضروري. يعالج التحميل الزائد للمشغل. يتخطى التعامل مع سحر "الحصول على".

باطلة sv_dec_nomg(SV *const sv)

sv_eq يُرجع قيمة منطقية تشير إلى ما إذا كانت السلاسل الموجودة في ملفي SV متطابقتين. يكون
UTF-8 و"استخدام البايتات" على دراية، تصبح المقابض سحرية، وستجبر وسيطاتها على ذلك
سلاسل إذا لزم الأمر.

I32 sv_eq(SV* sv1، SV* sv2)

sv_eq_flags
تقوم بإرجاع قيمة منطقية تشير إلى ما إذا كانت السلاسل الموجودة في ملفي SV متطابقتين. يكون
UTF-8 و"استخدام البايتات" على دراية بإجبار وسيطاتها على السلاسل إذا لزم الأمر. إذا
تتضمن الأعلام SV_GMAGIC، وهي تتعامل مع get-magic أيضًا.

I32 sv_eq_flags(SV* sv1، SV* sv2، أعلام const U32)

sv_force_normal_flags
التراجع عن أنواع مختلفة من التزييف على SV، حيث يعني التزييف "أكثر من" سلسلة: if
PV عبارة عن سلسلة مشتركة، قم بعمل نسخة خاصة؛ إذا كنا حكما، توقف عن الحكم؛ لو
نحن كرة أرضية، نرجع إلى xpvmg؛ إذا كنا عدديًا يُنسخ عند الكتابة، فهذا هو
وقت الكتابة عندما نقوم بالنسخ، ويتم استخدامه محليًا أيضًا؛ إذا كانت هذه سلسلة vster،
إسقاط السحر vsstring. إذا تم تعيين "SV_COW_DROP_PV"، فسيتم نسخ عددي عند الكتابة
يسقط المخزن المؤقت الكهروضوئي الخاص به (إن وجد) ويصبح SvPOK_off بدلاً من عمل نسخة.
(يستخدم عندما يكون هذا العدد على وشك أن يتم تعيينه على قيمة أخرى.) بالإضافة إلى ذلك، فإن
يتم تمرير المعلمة "flags" إلى "sv_unref_flags()" عند إلغاء التحديد.
يستدعي "sv_force_normal" هذه الوظيفة مع تعيين العلامات على 0.

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

باطلة sv_force_normal_flags(SV *const sv،
أعلام const U32)

sv_free قم بتخفيض العدد المرجعي لـ SV، وإذا انخفض إلى الصفر، فاتصل بـ "sv_clear" إلى
استدعاء المدمرات وتحرير أي ذاكرة يستخدمها الجسم؛ وأخيرا، إلغاء تخصيص
رأس SV نفسه. يتم استدعاؤه عادةً عبر ماكرو مجمّع "SvREFCNT_dec".

باطلة sv_free(SV *const sv)

sv_gets احصل على سطر من مقبض الملف وقم بتخزينه في ملف SV، مع إلحاقه اختياريًا بـ
السلسلة المخزنة حاليا. إذا لم تكن قيمة "إلحاق" 0، فسيتم إلحاق السطر بـ SV
بدلاً من الكتابة فوقه. يجب تعيين "إلحاق" على إزاحة البايت التي
يجب أن تبدأ السلسلة الملحقة في SV (عادةً ما يكون "SvCUR(sv)" مناسبًا
خيار).

شار* sv_gets(SV *const sv, PerlIO *const fp,
إلحاق I32)

sv_get_backrefs
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

إذا كان sv هو هدف مرجع ضعيف فإنه يقوم بإرجاع المراجع الخلفية
الهيكل المرتبط بـ SV ؛ وإلا قم بإرجاع NULL.

عند إرجاع نتيجة غير فارغة، يكون نوع الإرجاع ذا صلة. إذا كان
AV فإن عناصر AV هي المركبات RVs المرجعية الضعيفة التي تشير إلى هذا
غرض. وإذا كان من أي نوع آخر فالعنصر نفسه هو المرجع الضعيف.

انظر أيضا بيرل_sv_add_backref(), بيرل_sv_del_backref(), بيرل_sv_kill_backrefs()

SV* sv_get_backrefs(SV *const sv)

sv_grow يقوم بتوسيع المخزن المؤقت للأحرف في SV. إذا لزم الأمر، يستخدم "sv_unref" و
يقوم بترقية SV إلى "SVt_PV". إرجاع مؤشر إلى المخزن المؤقت للأحرف. استخدم ال
المجمع "SvGROW" بدلاً من ذلك.

شار* sv_grow(SV *const sv, STRLEN newlen)

sv_inc زيادة تلقائية للقيمة في SV، والقيام بتحويل السلسلة إلى رقمية إذا
ضروري. يعالج سحر "الحصول على" والتحميل الزائد للمشغل.

باطلة sv_inc(SV *const sv)

sv_inc_nomg
الزيادة التلقائية للقيمة في SV، وإجراء تحويل السلسلة إلى رقمي إذا
ضروري. يعالج التحميل الزائد للمشغل. يتخطى التعامل مع سحر "الحصول على".

باطلة sv_inc_nomg(SV *const sv)

sv_insert
إدراج سلسلة عند الإزاحة/الطول المحدد داخل SV. مشابهه ل
بيرل substr () وظيفة. مقابض الحصول على السحر.

باطلة sv_insert (SV *const bigstr، إزاحة const STRLEN،
كونست سترلين لين,
const char *const قليلا،
كونست سترلين ليتلين)

sv_insert_flags
مثل "sv_insert"، ولكن يتم تمرير "العلامات" الإضافية إلى "SvPV_force_flags"
وهذا ينطبق على "bigstr".

باطلة sv_insert_flags(SV *const bigstr،
إزاحة const STRLEN،
كونست سترلين لين,
const char *const قليلا،
كونست سترلين ليتلين,
أعلام const U32)

sv_isa يُرجع قيمة منطقية تشير إلى ما إذا كان SV مباركًا في الفئة المحددة.
لا يتحقق هذا من وجود أنواع فرعية؛ استخدم "sv_derived_from" للتحقق من الميراث
العلاقة.

int sv_isa(SV* sv, const char *const name)

sv_isobject
إرجاع قيمة منطقية تشير إلى ما إذا كان SV عبارة عن RV يشير إلى كائن مبارك.
إذا لم تكن SV عبارة عن عربة سكن متنقلة، أو إذا لم تتم مباركة الكائن، فسيعود هذا
خاطئة.

إنت sv_isobject(SV* sv)

sv_len يُرجع طول السلسلة في ملف SV. يعالج السحر ونوع الإكراه و
يضبط علامة UTF8 بشكل مناسب. راجع أيضًا "SvCUR"، الذي يتيح الوصول الأولي إلى ملف
فتحة xpv_cur.

سترلين sv_len(SV *const sv)

sv_len_utf8
إرجاع عدد الأحرف في السلسلة في ملف SV، مع احتساب بايتات UTF-8 العريضة
كحرف واحد. يعالج السحر ويكتب الإكراه.

STRLEN sv_len_utf8(SV *const sv)

sv_magic
يضيف السحر إلى SV. قم أولاً بترقية "sv" لكتابة "SVt_PVMG" إذا لزم الأمر
يضيف عنصرًا سحريًا جديدًا من النوع "كيف" إلى رأس القائمة السحرية.

راجع "sv_magicext" (الذي يستدعيه الآن "sv_magic") للحصول على وصف للمعالجة
من وسيطتي "الاسم" و"ناملين".

تحتاج إلى استخدام "sv_magicext" لإضافة السحر إلى SvREADONLY SVs وأيضًا لإضافة المزيد
من مثيل واحد لنفس "كيف".

باطلة sv_magic(SV *const sv، SV *const obj،
const int كيف، const char * اسم const،
ثابت I32 ناملين)

sv_magicext
يضيف السحر إلى SV، ويقوم بترقيته إذا لزم الأمر. يطبق vtable و
إرجاع مؤشر إلى السحر المضافة.

لاحظ أن "sv_magicext" سيسمح بأشياء لا يسمح بها "sv_magic". في
على وجه الخصوص، يمكنك إضافة السحر إلى SvREADONLY SVs، وإضافة أكثر من مثيل واحد لها
نفس "كيف".

إذا كانت قيمة "namlen" أكبر من الصفر، فسيتم استخدام "savepvn" نسخة يتم تخزين "الاسم"، إذا
"namlen" تساوي صفرًا، ثم يتم تخزين "name" كما هو و- كحالة خاصة أخرى - if
"(name && namlen == HEf_SVKEY)" ثم يُفترض أن "الاسم" يحتوي على "SV*" وهو
مخزنة كما هي مع زيادة REFCNT.

(يتم استخدام هذا الآن كإجراء فرعي بواسطة "sv_magic".)

MAGIC * sv_magicext(SV *const sv, SV *const obj,
ثابت كثافة العمليات كيف،
كونست مغفتبل *كونست فتبل،
حرف ثابت * اسم ثابت،
ثابت I32 ناملين)

sv_mortalcopy
إنشاء ملف SV جديد وهو نسخة من ملف SV الأصلي (باستخدام "sv_setsv"). الجديد
تم وضع علامة SV على أنها مميتة. وسيتم تدميره "قريبا"، إما عن طريق دعوة صريحة
إلى FREETMPS، أو عن طريق مكالمة ضمنية في أماكن مثل حدود البيان. يرى
أيضًا "sv_newmortal" و"sv_2mortal".

SV* sv_mortalcopy(SV *const oldsv)

sv_newmortal
يقوم بإنشاء SV فارغ جديد وهو مميت. تم تعيين العدد المرجعي لـ SV على 1.
سيتم تدميره "قريبًا"، إما عن طريق استدعاء صريح لـ FREETMPS، أو عن طريق
مكالمة ضمنية في أماكن مثل حدود البيان. انظر أيضًا "sv_mortalcopy"
و"sv_2mortal".

SV* sv_newmortal()

sv_newref
قم بزيادة العدد المرجعي لـ SV. استخدم برنامج التضمين "SvREFCNT_inc()" بدلاً من ذلك.

SV* sv_newref(SV *const sv)

sv_pos_b2u
يحول القيمة المشار إليها بواسطة الإزاحة من عدد البايتات من بداية
السلسلة، إلى عدد مكافئ من أحرف UTF-8. يعالج السحر و
نوع الإكراه.

استخدم "sv_pos_b2u_flags" في التفضيل، والذي يتعامل بشكل صحيح مع السلاسل الأطول من
2 جيجا بايت.

باطلة sv_pos_b2u (SV *const sv، I32 *const offsetp)

sv_pos_b2u_flags
يحول الإزاحة من عدد البايتات من بداية السلسلة إلى عدد
من العدد المكافئ لأحرف UTF-8. يعالج نوع الإكراه. الأعلام تم تمريره
إلى "SvPV_flags"، وعادةً ما يجب أن يكون "SV_GMAGIC|SV_CONST_RETURN" للتعامل معه
سحر.

STRLEN sv_pos_b2u_flags(SV *const sv,
إزاحة STRLEN const، أعلام U32)

sv_pos_u2b
يحول القيمة المشار إليها بواسطة الإزاحة من عدد أحرف UTF-8 من ملف
بداية السلسلة، لعدد يعادل عدد البايتات؛ إذا كان lenp غير
صفر، فإنه يفعل الشيء نفسه مع lenp، ولكن هذه المرة بدءًا من الإزاحة، بدلاً من ذلك
من بداية السلسلة. يعالج السحر ويكتب الإكراه.

استخدم "sv_pos_u2b_flags" في التفضيل، والذي يتعامل بشكل صحيح مع السلاسل الأطول من
2 جيجا بايت.

باطلة sv_pos_u2b(SV *const sv، I32 *const offsetp،
I32 * const lenp)

sv_pos_u2b_flags
يحول الإزاحة من عدد أحرف UTF-8 من بداية السلسلة إلى a
عدد العدد المكافئ للبايتات؛ إذا كانت قيمة lenp غير صفرية، فإنها تفعل الشيء نفسه
lenp، ولكن هذه المرة بدءًا من الإزاحة، وليس من بداية الملف
خيط. يعالج نوع الإكراه. الأعلام يتم تمريره إلى "SvPV_flags"، وعادةً
يجب أن يكون "SV_GMAGIC|SV_CONST_RETURN" للتعامل مع السحر.

STRLEN sv_pos_u2b_flags(SV *const sv, STRLEN uoffset,
STRLEN *const lenp، أعلام U32)

sv_pvbyten_force
الواجهة الخلفية للماكرو "SvPVbytex_force". استخدم الماكرو دائمًا بدلاً من ذلك.

شار* sv_pvbyten_force(SV *const sv, STRLEN *const lp)

sv_pvn_force
احصل على سلسلة معقولة من SV بطريقة أو بأخرى. التنفيذ الخاص لل
ماكرو "SvPV_force" للمترجمين الذين لا يمكنهم التعامل مع تعبيرات الماكرو المعقدة.
استخدم الماكرو دائمًا بدلاً من ذلك.

شار* sv_pvn_force(SV* sv, STRLEN* lp)

sv_pvn_force_flags
احصل على سلسلة معقولة من SV بطريقة أو بأخرى. إذا كانت "الأعلام" تحتوي على مجموعة بت "SV_GMAGIC"،
سيتم "mg_get" على "sv" إذا كان ذلك مناسبًا، وإلا فلا. "sv_pvn_force" و
يتم تنفيذ "sv_pvn_force_nomg" فيما يتعلق بهذه الوظيفة. تريد عادة
لاستخدام وحدات الماكرو المجمعة المتنوعة بدلاً من ذلك: راجع "SvPV_force" و"SvPV_force_nomg"

شار* sv_pvn_force_flags(SV *const sv,
سترلين * const lp,
أعلام const I32)

sv_pvutf8n_force
الواجهة الخلفية للماكرو "SvPVutf8x_force". استخدم الماكرو دائمًا بدلاً من ذلك.

شار* sv_pvutf8n_force(SV *const sv, STRLEN *const lp)

sv_reftype
تُرجع سلسلة تصف ما يشير إليه SV.

const char* sv_reftype(const SV *const sv, const int ob)

sv_replace
اجعل الوسيطة الأولى نسخة من الثانية، ثم احذف الأصل. ال
يتولى الهدف SV فعليًا ملكية جسم المصدر SV و
يرث أعلامها؛ ومع ذلك، فإن الهدف يحتفظ بأي سحر يمتلكه وأي سحر فيه
يتم تجاهل المصدر. لاحظ أن هذا نسخ SV متخصص إلى حد ما
عملية؛ ستحتاج في أغلب الأحيان إلى استخدام "sv_setsv" أو أحد وحدات الماكرو العديدة الخاصة به
الواجهات الأمامية.

باطلة sv_replace(SV *const sv، SV *const nsv)

sv_reset
التنفيذ الأساسي لوظيفة Perl "إعادة التعيين". لاحظ أن مستوى بيرل
تم إهمال الوظيفة بشكل غامض.

باطلة sv_reset(const char* s, HV *const stash)

sv_rvweaken
إضعاف المرجع: قم بتعيين علامة "SvWEAKREF" على عربة سكن متنقلة هذه؛ إعطاء المشار إليها إلى SV
سحر "PERL_MAGIC_backref" إذا لم يكن موجودًا بالفعل؛ ودفع مرجع خلفي لهذا
RV على مجموعة المراجع الخلفية المرتبطة بهذا السحر. إذا كانت عربة سكن متنقلة
سحري، سيتم استدعاء مجموعة السحر بعد مسح عربة سكن متنقلة.

SV* sv_rvweaken(SV *const sv)

sv_setiv
نسخ عدد صحيح إلى SV المحدد، والترقية أولاً إذا لزم الأمر. لا
التعامل مع السحر "المجموعة". انظر أيضًا "sv_setiv_mg".

باطلة sv_setiv (SV *const sv، const IV num)

sv_setiv_mg
مثل "sv_setiv"، ولكنه يتعامل أيضًا مع سحر "set".

باطلة sv_setiv_mg(SV *const sv, const IV i)

sv_setnv
نسخ نسخة مزدوجة إلى SV المحدد، والترقية أولاً إذا لزم الأمر. لا يتعامل
"تعيين" السحر. انظر أيضًا "sv_setnv_mg".

باطلة sv_setnv(SV *const sv، const NV num)

sv_setnv_mg
مثل "sv_setnv"، ولكنه يتعامل أيضًا مع سحر "set".

باطلة sv_setnv_mg(SV *const sv، const NV num)

sv_setpv
نسخ سلسلة إلى SV. يجب إنهاء السلسلة بحرف "NUL".
لا يتعامل مع السحر "المحدد". راجع "sv_setpv_mg".

باطلة sv_setpv (SV *const sv، const char *const ptr)

sv_setpvf
يعمل مثل "sv_catpvf" ولكنه ينسخ النص إلى ملف SV بدلاً من إلحاقه.
لا يتعامل مع السحر "المحدد". راجع "sv_setpvf_mg".

باطلة sv_setpvf(SV *const sv, const char *const pat,
...)

sv_setpvf_mg
مثل "sv_setpvf"، ولكنه يتعامل أيضًا مع سحر "set".

باطلة sv_setpvf_mg(SV *const sv،
const char *const pat، ...)

sv_setpviv
ينسخ عددًا صحيحًا إلى ملف SV المحدد، ويحدث أيضًا قيمة السلسلة الخاصة به. لا
التعامل مع السحر "المجموعة". راجع "sv_setpviv_mg".

باطلة sv_setpviv (SV *const sv، const IV num)

sv_setpviv_mg
مثل "sv_setpviv"، ولكنه يتعامل أيضًا مع سحر "set".

باطلة sv_setpviv_mg(SV *const sv, const IV iv)

sv_setpvn
ينسخ سلسلة (ربما تحتوي على أحرف "NUL") مضمنة في ملف SV. ال
تشير المعلمة "len" إلى عدد البايتات المراد نسخها. إذا كانت الوسيطة "ptr".
هو NULL سيصبح SV غير محدد. لا يتعامل مع السحر "المحدد". يرى
"sv_setpvn_mg".

باطلة sv_setpvn(SV *const sv, const char *const ptr,
كونست سترلين لين)

sv_setpvn_mg
مثل "sv_setpvn"، ولكنه يتعامل أيضًا مع سحر "set".

باطلة sv_setpvn_mg(SV *const sv،
const char *const ptr،
كونست سترلين لين)

sv_setpvs
مثل "sv_setpvn"، ولكنه يأخذ سلسلة حرفية بدلاً من زوج سلسلة/طول.

باطلة sv_setpvs(SV* sv, const char* s)

sv_setpvs_mg
مثل "sv_setpvn_mg"، ولكنه يأخذ سلسلة حرفية بدلاً من زوج سلسلة/طول.

باطلة sv_setpvs_mg(SV* sv, const char* s)

sv_setpv_mg
مثل "sv_setpv"، ولكنه يتعامل أيضًا مع سحر "set".

باطلة sv_setpv_mg(SV *const sv، const char *const ptr)

sv_setref_iv
نسخ عدد صحيح إلى SV جديد، اختياريًا مباركة SV. الوسيطة "rv".
سيتم ترقيته إلى عربة سكن متنقلة. سيتم تعديل عربة سكن متنقلة للإشارة إلى عربة سكن متنقلة جديدة. ال
تشير الوسيطة "classname" إلى حزمة البركة. اضبط "اسم الفئة" على
"NULL" لتجنب البركة. سيكون لـ SV الجديد عدد مرجعي قدره 1 و
سيتم إرجاع عربة سكن متنقلة.

SV* sv_setref_iv(SV *const rv,
const char * اسم فئة const،
الثابت الرابع الرابع)

sv_setref_nv
ينسخ نسخة مزدوجة إلى SV جديد، ويبارك SV بشكل اختياري. سوف تقوم الوسيطة "rv".
تتم ترقيته إلى عربة سكن متنقلة. سيتم تعديل عربة سكن متنقلة للإشارة إلى عربة سكن متنقلة جديدة. ال
تشير الوسيطة "classname" إلى حزمة البركة. اضبط "اسم الفئة" على
"NULL" لتجنب البركة. سيكون لـ SV الجديد عدد مرجعي قدره 1 و
سيتم إرجاع عربة سكن متنقلة.

SV* sv_setref_nv(SV *const rv,
const char * اسم فئة const،
كونست نيفادا نيفادا)

sv_setref_pv
ينسخ المؤشر إلى ملف SV جديد، ويبارك SV بشكل اختياري. الوسيطة "rv".
سيتم ترقيته إلى عربة سكن متنقلة. سيتم تعديل عربة سكن متنقلة للإشارة إلى عربة سكن متنقلة جديدة. لو
الوسيطة "pv" فارغة ثم سيتم وضع "PL_sv_undef" في SV. ال
تشير الوسيطة "classname" إلى حزمة البركة. اضبط "اسم الفئة" على
"NULL" لتجنب البركة. سيكون لـ SV الجديد عدد مرجعي قدره 1 و
سيتم إرجاع عربة سكن متنقلة.

لا تستخدم مع أنواع Perl الأخرى مثل HV، AV، SV، CV، لأن تلك الكائنات
سوف تتلف بسبب عملية نسخ المؤشر.

لاحظ أن "sv_setref_pvn" ينسخ السلسلة بينما يقوم هذا بنسخ المؤشر.

SV* sv_setref_pv(SV *const rv,
const char * اسم فئة const،
باطلة * ثابت الكهروضوئية)

sv_setref_pvn
ينسخ سلسلة إلى SV جديد، ويبارك SV بشكل اختياري. طول
يجب تحديد السلسلة بـ "n". ستتم ترقية الوسيطة "rv" إلى RV.
سيتم تعديل عربة سكن متنقلة للإشارة إلى عربة سكن متنقلة جديدة. الوسيطة "اسم الفئة".
يدل على الحزمة للبركة. اضبط "اسم الفئة" على "NULL" لتجنب
بركة. سيكون لـ SV الجديد عدد مرجعي قدره 1، وسيكون RV كذلك
عاد.

لاحظ أن "sv_setref_pv" ينسخ المؤشر بينما يقوم هذا بنسخ السلسلة.

SV* sv_setref_pvn(SV *const rv,
const char * اسم فئة const،
const شار *const الكهروضوئية،
كونست سترلين ن)

sv_setref_pvs
مثل "sv_setref_pvn"، ولكنه يأخذ سلسلة حرفية بدلاً من زوج سلسلة/طول.

SV * sv_setref_pvs(const char* s)

sv_setref_uv
ينسخ عددًا صحيحًا غير موقّع إلى SV جديد، ويبارك SV بشكل اختياري. "آر في"
ستتم ترقية الوسيطة إلى عربة سكن متنقلة. سيتم تعديل عربة سكن متنقلة للإشارة إلى الجديد
SV. تشير الوسيطة "classname" إلى حزمة البركة. تعيين
"اسم الفئة" إلى "NULL" لتجنب البركة. سيكون لـ SV الجديد مرجع
العد 1، وسيتم إرجاع RV.

SV* sv_setref_uv(SV *const rv,
const char * اسم فئة const،
ثابت الأشعة فوق البنفسجية)

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

ربما تريد استخدام إحدى مجموعات الأغلفة، مثل "SvSetSV"،
"SvSetSV_nosteal"، و"SvSetMagicSV"، و"SvSetMagicSV_nosteal".

باطلة sv_setsv (SV *dstr، SV *sstr)

sv_setsv_flags
نسخ محتويات SV المصدر "ssv" إلى الوجهة SV "dsv". ال
قد يتم تدمير مصدر SV إذا كان مميتًا، لذا لا تستخدم هذه الوظيفة إذا كان
يجب إعادة استخدام المصدر SV. لا يتعامل مع السحر "المحدد". بشكل فضفاض، ذلك
إجراء نسخة حسب القيمة، مما يؤدي إلى مسح أي محتوى سابق للوجهة.
إذا كانت المعلمة "flags" تحتوي على مجموعة البت "SV_GMAGIC"، فسيتم "mg_get" على "ssv" إذا
المناسب، وإلا فلا. إذا كانت المعلمة "الإشارات" تحتوي على مجموعة بت "SV_NOSTEAL" إذن
لن يتم سرقة المخازن المؤقتة المؤقتة. و"sv_setsv_nomg" هما
تنفيذها فيما يتعلق بهذه الوظيفة.

ربما تريد استخدام إحدى مجموعات الأغلفة، مثل "SvSetSV"،
"SvSetSV_nosteal"، و"SvSetMagicSV"، و"SvSetMagicSV_nosteal".

هذه هي الوظيفة الأساسية لنسخ الكميات القياسية، ومعظم النسخ الأخرى
تستخدم الوظائف ووحدات الماكرو هذا أدناه.

باطلة sv_setsv_flags(SV *dstr، SV *sstr،
أعلام const I32)

sv_setsv_mg
مثل "sv_setsv"، ولكنه يتعامل أيضًا مع سحر "set".

باطلة sv_setsv_mg(SV *const dstr، SV *const sstr)

sv_setuv
ينسخ عددًا صحيحًا غير مُوقع في ملف SV المحدد، مع الترقية أولاً إذا لزم الأمر. يفعل
لا تتعامل مع السحر "المحدد". انظر أيضًا "sv_setuv_mg".

باطلة sv_setuv(SV *const sv، const UV num)

sv_setuv_mg
مثل "sv_setuv"، ولكنه يتعامل أيضًا مع سحر "set".

باطلة sv_setuv_mg(SV *const sv, const UV u)

sv_tainted
اختبار SV للتلوث. استخدم "SvTAINTED" بدلاً من ذلك.

منطقي sv_tainted(SV *const sv)

sv_true يُرجع صحيحًا إذا كان لـ SV قيمة حقيقية وفقًا لقواعد Perl. استخدم الماكرو "SvTRUE".
بدلاً من ذلك، والتي قد تستدعي "sv_true()" أو قد تستخدم بدلاً من ذلك إصدارًا مضمّنًا.

I32 sv_true(SV *const sv)

sv_unmagic
يزيل كل السحر من النوع "type" من SV.

int sv_unmagic(SV *const sv، نوع const int)

sv_unmagicext
يزيل كل السحر من النوع "type" مع "vtbl" المحدد من SV.

int sv_unmagicext(SV *const sv, نوع const int,
إم جي في تي بي إل * فتبل)

sv_unref_flags
يقوم بإلغاء تعيين حالة RV الخاصة بـ SV، ويقلل العدد المرجعي لأي شيء كان
يتم الرجوع إليها بواسطة RV. يمكن تقريبًا اعتبار هذا بمثابة انعكاس لـ
"newSVrv". يمكن أن تحتوي الوسيطة "cflags" على "SV_IMMEDIATE_UNREF" لفرض الأمر
سيتم تقليل العدد المرجعي (وإلا فإن التناقص مشروط
يختلف عدد المرجع عن واحد أو أن يكون المرجع للقراءة فقط
SV). راجع "SvROK_off".

باطلة sv_unref_flags(SV *const ref، const U32 flags)

sv_untaint
إزالة التلوث عن SV. استخدم "SvTAINTED_off" بدلاً من ذلك.

باطلة sv_untaint(SV *const sv)

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

باطلة sv_upgrade(SV *const sv، svtype new_type)

sv_usepvn_flags
يخبر SV باستخدام "ptr" للعثور على قيمة السلسلة الخاصة به. عادة يتم تخزين السلسلة
داخل SV، لكن sv_usepvn يسمح لـ SV باستخدام سلسلة خارجية. "بي تي آر"
يجب أن يشير إلى الذاكرة التي تم تخصيصها بواسطة Newx. يجب أن تكون بداية أ
كتلة الذاكرة Newx-ed، وليس مؤشرًا إلى منتصفها (احذر من OOK و
(نسخ عند الكتابة)، وألا يكون من مخصص ذاكرة غير Newx مثل "malloc". ال
يجب توفير طول السلسلة "len". بشكل افتراضي، ستقوم هذه الوظيفة "بالتجديد"
(أي إعادة تخصيص، نقل) الذاكرة المشار إليها بواسطة "ptr"، لذلك لا ينبغي أن يكون هذا المؤشر
تم تحريرها أو استخدامها من قبل المبرمج بعد إعطائها إلى sv_usepvn، ولا ينبغي ذلك
يمكن استخدام أي مؤشرات من "خلف" هذا المؤشر (على سبيل المثال، ptr + 1).

إذا كانت "الأعلام" وSV_SMAGIC صحيحة، فسيتم الاتصال بـ SvSETMAGIC. إذا كانت "الأعلام" &
SV_HAS_TRAILING_NUL صحيح، لذا يجب أن يكون "ptr[len]" هو "NUL"، وسيتم إعادة التخصيص
يتم تخطيه (أي أن المخزن المؤقت أطول بالفعل بمقدار بايت واحد على الأقل من "len"، و
يلبي بالفعل متطلبات التخزين في "SvPVX").

باطلة sv_usepvn_flags(SV *const sv, char* ptr,
كونست سترلين لين,
أعلام const U32)

sv_utf8_decode
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

إذا كان PV لـ SV عبارة عن تسلسل ثماني بتات في UTF-8 ويحتوي على بايتات متعددة
حرف، يتم تشغيل علامة "SvUTF8" بحيث تبدو وكأنها حرف. لو
يحتوي PV على أحرف أحادية البايت فقط، وتظل علامة "SvUTF8" متوقفة. المسح
PV للتحقق من الصلاحية وإرجاع خطأ إذا كان PV غير صالح UTF-8.

منطقي sv_utf8_decode(SV *const sv)

sv_utf8_downgrade
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

محاولات تحويل PV لـ SV من الأحرف إلى البايت. إذا كانت الكهروضوئية تحتوي على
الحرف الذي لا يمكن احتواؤه في بايت، سيفشل هذا التحويل؛ في هذه الحالة،
إما أن تقوم بإرجاع خطأ، أو إذا لم يكن "fail_ok" صحيحًا، فسيتم إرجاعه.

هذه ليست واجهة Unicode للأغراض العامة لتشفير البايت: استخدم Encode
تمديد لذلك.

منطقي sv_utf8_downgrade(SV *const sv,
const bool Fail_ok)

sv_utf8_encode
يحول PV لـ SV إلى UTF-8، ولكن بعد ذلك يقوم بإيقاف تشغيل علامة "SvUTF8" بحيث تكون
يبدو مثل الثمانيات مرة أخرى.

باطلة sv_utf8_encode(SV *const sv)

sv_utf8_upgrade
يحول PV لـ SV إلى نموذجه المشفر UTF-8. يفرض SV على شكل سلسلة
إذا لم يكن بالفعل. سوف "mg_get" على "SV" إذا كان ذلك مناسبا. يقوم دائمًا بتعيين
علامة SvUTF8 لتجنب التحقق من الصلاحية في المستقبل حتى لو كانت السلسلة بأكملها هي نفسها
في UTF-8 كما لا. إرجاع عدد البايتات في السلسلة المحولة

هذا ليس ترميز بايت للأغراض العامة لواجهة Unicode: استخدم التشفير
تمديد لذلك.

سترلين sv_utf8_upgrade(SV *sv)

sv_utf8_upgrade_flags
يحول PV لـ SV إلى نموذجه المشفر UTF-8. يفرض SV على شكل سلسلة
إذا لم يكن بالفعل. قم دائمًا بتعيين علامة SvUTF8 لتجنب عمليات التحقق من الصلاحية في المستقبل
حتى لو كانت جميع البايتات ثابتة في UTF-8. إذا كانت "الأعلام" تحتوي على مجموعة بت "SV_GMAGIC"،
سيتم "mg_get" على "sv" إذا كان ذلك مناسبًا، وإلا فلا.

إذا تم تعيين "العلامات" على SV_FORCE_UTF8_UPGRADE، فإن هذه الوظيفة تفترض أن PV سوف
توسيع عند تحويله إلى UTF-8، ويتخطى العمل الإضافي للتحقق من ذلك.
عادةً ما يتم استخدام هذه العلامة بواسطة روتين قام بالفعل بتحليل السلسلة و
يعثر على مثل هذه الأحرف، ويمرر هذه المعلومات حتى لا يحدث ذلك في العمل
يجب أن تتكرر.

إرجاع عدد البايتات في السلسلة المحولة.

هذا ليس ترميز بايت للأغراض العامة لواجهة Unicode: استخدم التشفير
تمديد لذلك.

STRLEN sv_utf8_upgrade_flags(SV *const sv,
أعلام const I32)

sv_utf8_upgrade_flags_grow
مثل sv_utf8_upgrade_flags، ولكن يحتوي على معلمة إضافية "إضافية"، وهي
عدد البايتات غير المستخدمة، ويضمن أن تكون سلسلة "sv" مجانية بعد ذلك
يعود. يتيح ذلك للمتصل حجز مساحة إضافية ينوي ملؤها
تجنب النمو الزائد.

"sv_utf8_upgrade" و"sv_utf8_upgrade_nomg" و"sv_utf8_upgrade_flags" هي
تنفيذها فيما يتعلق بهذه الوظيفة.

إرجاع عدد البايتات في السلسلة المحولة (لا يشمل البايتات الاحتياطية).

STRLEN sv_utf8_upgrade_flags_grow(SV *const sv,
أعلام const I32,
سترلين اضافية)

sv_utf8_upgrade_nomg
مثل sv_utf8_upgrade، لكنه لا يفعل السحر على "sv".

STRLEN sv_utf8_upgrade_nomg(SV *sv)

sv_vcatpvf
يعالج وسيطاته مثل "vsprintf" ويلحق الإخراج المنسق بملف SV.
لا يتعامل مع السحر "المحدد". راجع "sv_vcatpvf_mg".

يتم استخدامه عادةً عبر الواجهة الأمامية "sv_catpvf".

باطلة sv_vcatpvf(SV *const sv, const char *const pat,
va_list * وسيطات const)

sv_vcatpvfn
باطلة sv_vcatpvfn(SV *const sv, const char *const pat,
باتلين كونست سترلين,
va_list * وسيطات const،
SV ** const svargs، const I32 svmax،
منطقي * ثابت ربما_ملوث)

sv_vcatpvfn_flags
يعالج وسيطاته مثل "vsprintf" ويلحق الإخراج المنسق بملف SV.
يستخدم مصفوفة من SVs إذا كانت قائمة وسيطات متغير نمط C مفقودة (NULL).
عند التشغيل مع تمكين عمليات التحقق من الشوائب، يتم الإشارة إلى النتائج من خلال "ربما_ملوث".
غير جديرة بالثقة (غالبًا ما يرجع ذلك إلى استخدام اللغات).

إذا تم تسميتها باسم "sv_vcatpvfn" أو كانت العلامات تتضمن "SV_GMAGIC"، فستحصل على المكالمات بشكل سحري.

يتم استخدامه عادةً عبر إحدى واجهاته الأمامية "sv_vcatpvf" و"sv_vcatpvf_mg".

باطلة sv_vcatpvfn_flags(SV *const sv،
كونست شار * كونست بات،
باتلين كونست سترلين,
va_list * وسيطات const،
SV ** كونست سفارجس،
كونست I32 سفماكس,
منطقي * كونست ربما_ملوث،
أعلام const U32)

sv_vcatpvf_mg
مثل "sv_vcatpvf"، ولكنه يتعامل أيضًا مع سحر "set".

يتم استخدامه عادةً عبر الواجهة الأمامية "sv_catpvf_mg".

باطلة sv_vcatpvf_mg(SV *const sv،
كونست شار * كونست بات،
va_list * وسيطات const)

sv_vsetpvf
يعمل مثل "sv_vcatpvf" ولكنه ينسخ النص إلى ملف SV بدلاً من إلحاقه.
لا يتعامل مع السحر "المحدد". راجع "sv_vsetpvf_mg".

يتم استخدامه عادةً عبر الواجهة الأمامية "sv_setpvf".

باطلة sv_vsetpvf(SV *const sv, const char *const pat,
va_list * وسيطات const)

sv_vsetpvfn
يعمل مثل "sv_vcatpvfn" ولكنه ينسخ النص إلى ملف SV بدلاً من إلحاقه.

يتم استخدامه عادةً عبر إحدى واجهاته الأمامية "sv_vsetpvf" و"sv_vsetpvf_mg".

باطلة sv_vsetpvfn(SV *const sv, const char *const pat,
باتلين كونست سترلين,
va_list * وسيطات const،
SV ** const svargs، const I32 svmax،
منطقي * ثابت ربما_ملوث)

sv_vsetpvf_mg
مثل "sv_vsetpvf"، ولكنه يتعامل أيضًا مع سحر "set".

يتم استخدامه عادةً عبر الواجهة الأمامية "sv_setpvf_mg".

باطلة sv_vsetpvf_mg(SV *const sv،
كونست شار * كونست بات،
va_list * وسيطات const)

يونيكود الدعم الفني


يحتوي "دعم Unicode" في perlguts على مقدمة لواجهة برمجة التطبيقات (API) هذه.

راجع أيضًا "تصنيف الأحرف" و"تغيير حالة الأحرف". وظائف مختلفة
خارج هذا القسم يعمل أيضًا بشكل خاص مع Unicode. ابحث عن السلسلة "utf8" في
هذا المستند.

bytes_cmp_utf8
يقارن تسلسل الأحرف (المخزنة كثمانيات) في "b"، "blen" مع
تسلسل الأحرف (المخزن كـ UTF-8) في "u"، "ulen". إرجاع 0 إذا كانوا كذلك
يساوي -1 أو -2 إذا كانت السلسلة الأولى أقل من السلسلة الثانية، +1 أو +2 إذا
السلسلة الأولى أكبر من السلسلة الثانية.

يتم إرجاع -1 أو +1 إذا كانت السلسلة الأقصر مماثلة لبداية السلسلة
سلسلة أطول. يتم إرجاع -2 أو +2 إذا كان هناك اختلاف بين الأحرف
داخل السلاسل.

int bytes_cmp_utf8(const U8 *b, STRLEN blen,
const U8 *u، STRLEN ulen)

bytes_from_utf8
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يحول سلسلة "s" بطول "len" من UTF-8 إلى ترميز البايت الأصلي.
على عكس "utf8_to_bytes" ولكن مثل "bytes_to_utf8"، يُرجع مؤشرًا إلى الجديد-
السلسلة التي تم إنشاؤها، وتحديثات "len" لتحتوي على الطول الجديد. إرجاع الأصلي
إذا لم يحدث أي تحويل، فلن تتغير السلسلة "len". لا تفعل شيئًا إذا كان "is_utf8"
يشير إلى 0. يضبط "is_utf8" على 0 إذا تم تحويل "s" أو يتكون بالكامل من
الأحرف الثابتة في utf8 (أي US-ASCII على الأجهزة غير EBCDIC).

U8* bytes_from_utf8(const U8 *s, STRLEN *len,
منطقي *is_utf8)

bytes_to_utf8
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يحول سلسلة "s" بطول بايت "len" من الترميز الأصلي إلى UTF-8.
إرجاع مؤشر إلى السلسلة التي تم إنشاؤها حديثًا، وتعيين "len" لتعكس الجديد
الطول بالبايت.

سيتم كتابة حرف "NUL" بعد نهاية السلسلة.

إذا كنت تريد التحويل إلى UTF-8 من ترميزات أخرى غير الترميزات الأصلية (Latin1 أو
EBCDIC)، راجع "sv_recode_to_utf8"().

U8* bytes_to_utf8(const U8 *s, STRLEN *len)

DO_UTF8 يُرجع منطقيًا يوضح ما إذا كان سيتم التعامل مع PV في "sv" أم لا
المشفرة في UTF-8.

يجب عليك استخدام هذا بعد استدعاء "SvPV()" أو أحد متغيراته، في حال وجوده
يؤدي استدعاء التحميل الزائد للسلسلة إلى تحديث علامة ترميز UTF-8 الداخلية.

منطقي DO_UTF8(SV* sv)

FoldEQ_utf8
يتم إرجاع صحيح إذا كانت الأجزاء البادئة من السلاسل "s1" و"s2" (إما أو كليهما
والتي قد تكون في UTF-8) هي نفسها غير حساسة لحالة الأحرف؛ كاذبة خلاف ذلك. كيف
يتم تحديد المسافة البعيدة في السلاسل للمقارنة بواسطة معلمات الإدخال الأخرى.

إذا كان "u1" صحيحًا، فمن المفترض أن تكون السلسلة "s1" موجودة بترميز UTF-8؛
وإلا فمن المفترض أن يكون بترميز 8 بت الأصلي. المقابلة لـ "u2"
بالنسبه لـ "s2".

إذا كان طول البايت "l1" غير صفر، فإنه يوضح مدى المسافة في "s1" للتحقق من الطية
المساواة. بمعنى آخر، سيتم استخدام "s1"+"l1" كهدف يجب الوصول إليه. المسح
لن تعتبر مباراة إلا إذا تم الوصول إلى الهدف والمسح
لن يستمر بعد هذا الهدف. في المقابل لـ "l2" فيما يتعلق بـ "s2".

إذا كان "pe1" غير فارغ وكان المؤشر الذي يشير إليه ليس فارغًا، فهذا المؤشر كذلك
يعتبر مؤشر نهاية للموضع 1 بايت بعد الحد الأقصى للنقطة في "s1"
وبعد ذلك لن يستمر المسح تحت أي ظرف من الظروف. (هذا الروتين
يفترض أن سلاسل الإدخال المشفرة UTF-8 ليست مشوهة؛ يمكن إدخال تالف
جعله يقرأ الماضي "pe1"). هذا يعني أنه إذا كان كل من "l1" و"pe1" موجودين
المحدد، و"pe1" أقل من "s1"+"l1"، فلن تكون المباراة ناجحة أبدًا
لأنه لا يمكنه أبدًا الوصول إلى هدفه (وفي الواقع يتم التأكيد عليه ضده).
في المقابل لـ "pe2" فيما يتعلق بـ "s2".

يجب أن يكون لهدف واحد على الأقل من "s1" و"s2" هدفًا (يجب أن يكون لهدف واحد على الأقل من "l1" و"l2"
تكون غير صفرية)، وإذا حدث ذلك، فيجب الوصول إلى كليهما للحصول على مباراة ناجحة.
وأيضًا، إذا كان طية الشخصية عبارة عن أحرف متعددة، فيجب أن تكون جميعها كذلك
متطابق (راجع مرجع tr21 أدناه لمعرفة "الطي").

عند نجاح المطابقة، إذا كانت قيمة "pe1" غير فارغة، فسيتم تعيينها للإشارة إلى ملف
بداية التالي حرف "s1" يتجاوز ما تمت مطابقته. في المقابل
لـ "pe2" و"s2".

بالنسبة لعدم تحسس حالة الأحرف، يتم استخدام "طي حالة الأحرف" الخاص بـ Unicode بدلاً من ذلك
العلوي/الأحرف الصغيرة على حد سواء الأحرف، انظر
<http://www.unicode.org/unicode/reports/tr21/> (تعيينات الحالة).

I32foldEQ_utf8(const char *s1, char **pe1, UV l1,
منطقي u1، const char *s2، char **pe2،
الأشعة فوق البنفسجية l2، بول u2)

isUTF8_CHAR
إرجاع عدد البايتات التي تبدأ بـ "s" والتي تشكل UTF-8 قانونيًا (أو UTF-
EBCDIC) حرف مشفر، لا يبحث أبعد من وحدات البايت "e - s" في "s".
إرجاع 0 إذا كان التسلسل الذي يبدأ من "s" إلى "e - 1" غير منسق بشكل جيد باستخدام UTF-8

لاحظ أن الحرف INVARIANT (أي ASCII على الأجهزة غير التابعة لـ EBCDIC) صالح
حرف UTF-8.

STRLEN isUTF8_CHAR(const U8 *s, const U8 *e)

is_ascii_string
هذا مرادف ذو اسم مضلل لـ "is_invariant_string". على ASCII العش
الأنظمة الأساسية، الاسم ليس مضللاً: أحرف نطاق ASCII هي بالضبط
متغيرات UTF-8. لكن أجهزة EBCDIC تحتوي على ثوابت أكثر من مجرد ASCII
الأحرف، لذلك يُفضل "is_invariant_string".

منطقي is_ascii_string(const U8 *s, STRLEN len)

is_invariant_string
يُرجع صحيحًا إذا كانت وحدات البايت "len" الأولى من السلسلة "s" هي نفسها بغض النظر عن ذلك
لتشفير UTF-8 للسلسلة (أو ترميز UTF-EBCDIC على أجهزة EBCDIC).
هذا إذا كانت UTF-8 ثابتة. على أجهزة ASCII-ish، جميع ملفات ASCII
الأحرف وأحرف ASCII فقط هي التي تناسب هذا التعريف. على أجهزة EBCDIC،
أحرف نطاق ASCII ثابتة، ولكن أيضًا عناصر التحكم C1 و
"\ج؟" (وهو ليس في نطاق ASCII على EBCDIC).

إذا كانت "len" تساوي 0، فسيتم حسابها باستخدام strlen(s)، (مما يعني أنه إذا كنت تستخدم هذا
الخيار، لا يمكن أن يحتوي "s" على أحرف "NUL" ويجب أن يحتوي على
إنهاء البايت "NUL").

راجع أيضًا "is_utf8_string"() و"is_utf8_string_loclen"() و
"is_utf8_string_loc"().

منطقي is_invariant_string(const U8 *s, STRLEN len)

is_utf8_string
إرجاع صحيح إذا كانت وحدات البايت "len" الأولى من السلسلة "s" تشكل سلسلة UTF-8 صالحة،
كاذبة خلاف ذلك. إذا كانت "len" تساوي 0، فسيتم حسابها باستخدام strlen(s) (والتي
يعني أنه إذا استخدمت هذا الخيار، فلا يمكن أن يحتوي "s" على أحرف "NUL" مضمنة و
يجب أن يحتوي على بايت إنهاء "NUL"). لاحظ أن جميع الأحرف هي ASCII
تشكل "سلسلة UTF-8 صالحة".

راجع أيضًا "is_invariant_string"() و"is_utf8_string_loclen"() و
"is_utf8_string_loc"().

منطقي is_utf8_string(const U8 *s, STRLEN len)

is_utf8_string_loc
مثل "is_utf8_string" ولكنه يخزن موقع الفشل (في حالة
"فشل utf8ness") أو الموقع "s"+"len" (في حالة "نجاح utf8ness")
في "الجيش الشعبي".

راجع أيضًا "is_utf8_string_loclen"() و"is_utf8_string"().

منطقي is_utf8_string_loc(const U8 *s, STRLEN len,
كونست U8 **ep)

is_utf8_string_loclen
مثل "is_utf8_string"() ولكنه يخزن موقع الفشل (في حالة
"فشل utf8ness") أو الموقع "s"+"len" (في حالة "نجاح utf8ness")
في "ep"، وعدد الأحرف المشفرة UTF-8 في "el".

راجع أيضًا "is_utf8_string_loc"() و"is_utf8_string"().

منطقي is_utf8_string_loclen(const U8 *s, STRLEN len,
const U8 **ep، STRLEN *el)

pv_uni_display
أنشئ إلى العدد "dsv" نسخة قابلة للعرض من السلسلة "spv"، الطول "len"،
يبلغ طول الإصدار القابل للعرض وحدات البايت "pvlim" على الأكثر (إذا كان أطول، فالباقي
سيتم اقتطاعها وإلحاق "...").

يمكن أن يتم تعيين UNI_DISPLAY_ISPRINT للوسيطة "الإشارات" ليتم عرضها isPRINT()قادر
الأحرف بنفسها، UNI_DISPLAY_BACKSLASH لعرض \\[nrfta\\] كـ
الإصدارات المائلة العكسية (مثل '\n') (يفضل UNI_DISPLAY_BACKSLASH على
UNI_DISPLAY_ISPRINT لـ \\). UNI_DISPLAY_QQ (والاسم المستعار لها UNI_DISPLAY_REGEX)
تم تشغيل كل من UNI_DISPLAY_BACKSLASH وUNI_DISPLAY_ISPRINT.

يتم إرجاع المؤشر إلى PV لـ "dsv".

انظر أيضًا "sv_uni_display".

شار* pv_uni_display(SV *dsv, const U8 *spv,
سترلين لين، سترلين بفليم،
أعلام الأشعة فوق البنفسجية)

sv_cat_decode
من المفترض أن يكون الترميز كائن تشفير، ومن المفترض أن يكون PV لـ ssv
الثمانيات في هذا التشفير وفك التشفير يبدأ الإدخال من الموضع الذي (PV
+ *الإزاحة) أشار إلى. سيتم ربط ملف dsv بسلسلة UTF-8 التي تم فك تشفيرها من
ssv. سيتم إنهاء فك التشفير عندما تظهر السلسلة tstr في إخراج فك التشفير أو
ينتهي الإدخال على PV لـ ssv. القيمة التي ستكون نقاط الإزاحة
تم تعديله إلى موضع الإدخال الأخير على ssv.

تُرجع الدالة TRUE إذا تم العثور على علامة الإنهاء، وتُرجع غير ذلك FALSE.

منطقي sv_cat_decode(SV* dsv، SV *الترميز، SV *ssv،
int *offset، char* tstr، int tlen)

sv_recode_to_utf8
من المفترض أن يكون الترميز كائن تشفير، عند الإدخال يكون PV للـ sv
من المفترض أن تكون ثمانيات في هذا التشفير، وسيتم تحويل sv إلى Unicode
(و UTF-8).

إذا كان sv بالفعل UTF-8 (أو إذا لم يكن POK)، أو إذا لم يكن التشفير
المرجع، لا يتم فعل أي شيء لSV. إذا لم يكن الترميز "Encode::XS"
كائن الترميز، سوف تحدث أشياء سيئة. (يرى ليب/encoding.pm والتشفير.)

يتم إرجاع PV من sv.

شار* sv_recode_to_utf8(SV* sv، SV *تشفير)

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

وسيطة "الأعلام" كما في "pv_uni_display"().

يتم إرجاع المؤشر إلى PV لـ "dsv".

شار* sv_uni_display(SV *dsv, SV *ssv, STRLEN pvlim,
أعلام الأشعة فوق البنفسجية)

to_utf8_case
يحتوي "p" على المؤشر إلى سلسلة UTF-8 التي تشفر الحرف الموجود
تحويلها. يفترض هذا الروتين أن الحرف عند "p" تم تشكيله بشكل جيد.

"ustrp" هو مؤشر إلى المخزن المؤقت للأحرف لوضع نتيجة التحويل إليه.
"lenp" هو مؤشر لطول النتيجة.

"swashp" هو مؤشر للغسل المراد استخدامه.

يتم تخزين كل من التعيينات الخاصة والعادية في lib/unicore/To/Foo.plو
تم تحميله بواسطة SWASHNEW، باستخدام ليب/utf8_heavy.pl. "خاص" (عادة، ولكن ليس دائما،
تعيين متعدد الأحرف)، تمت تجربته أولاً.

"خاص" عبارة عن سلسلة، عادة "NULL" أو "". "NULL" تعني عدم استخدام أي شيء خاص
التعيينات؛ "" يعني استخدام التعيينات الخاصة. القيم الأخرى غير هذين
يتم التعامل معه كاسم التجزئة التي تحتوي على التعيينات الخاصة، مثل
"utf8::ToSpecLower".

"عادي" عبارة عن سلسلة مثل "ToLower" والتي تعني swash %utf8::ToLower.

الأشعة فوق البنفسجية to_utf8_case(const U8 *p, U8* ustrp,
سترلين *لينب، SV **سواشب،
ثابت شار * عادي،
حرف ثابت * خاص)

to_utf8_fold
بدلاً من ذلك، استخدم "toFOLD_utf8".

الأشعة فوق البنفسجية to_utf8_fold(const U8 *p, U8* ustrp,
سترلين *لينب)

to_utf8_lower
بدلاً من ذلك استخدم "toLOWER_utf8".

الأشعة فوق البنفسجية to_utf8_lower(const U8 *p, U8* ustrp,
سترلين *لينب)

to_utf8_title
بدلاً من ذلك استخدم "toTITLE_utf8".

الأشعة فوق البنفسجية to_utf8_title(const U8 *p, U8* ustrp,
سترلين *لينب)

to_utf8_upper
بدلاً من ذلك استخدم "toUPPER_utf8".

الأشعة فوق البنفسجية to_utf8_upper(const U8 *p, U8* ustrp,
سترلين *لينب)

utf8n_to_uvchr
يجب استخدام هذه الوظيفة في ظروف خاصة جدًا فقط. معظم التعليمات البرمجية
يجب استخدام "utf8_to_uvchr_buf"() بدلاً من استدعاء هذا مباشرة.

روتين فك تشفير المستوى السفلي UTF-8. تُرجع قيمة نقطة الكود الأصلية لـ
الحرف الأول في السلسلة "s"، والتي من المفترض أن تكون بتنسيق UTF-8 (أو UTF-EBCDIC)
ترميز، ولا يزيد عن بايتات "curlen"؛ *retlen (إذا لم تكن كلمة "retlen" فارغة).
يتم ضبطه على طول هذا الحرف بالبايت.

تحدد قيمة "الأعلام" السلوك عندما لا تشير "s" إلى بئر
شكلت حرف UTF-8. إذا كانت "العلامات" تساوي 0، فعندما يتم العثور على تشوه، تكون القيمة صفر
تم إرجاعها وتم تعيين *retlen بحيث يكون ("s" + *retlen) هو الموضع المحتمل التالي
في "s" يمكن أن يبدأ حرفًا غير مشوه. أيضًا، إذا كانت تحذيرات UTF-8
لم يتم تعطيلها معجميا، يتم رفع تحذير.

يمكن تعيين علامات "السماح" المختلفة في "أعلام" للسماح (وليس التحذير) للفرد
أنواع التشوهات، مثل أن يكون التسلسل أطول من اللازم (أي عندما يكون هناك
هو تسلسل أقصر يمكنه التعبير عن نفس نقطة الكود؛ التسلسلات الطويلة هي
محظور صراحةً في معيار UTF-8 بسبب مشكلات أمنية محتملة).
مثال آخر للتشوه هو أن البايت الأول من الحرف ليس قانونيًا
البايت الأول. يرى utf8.h للحصول على قائمة هذه الأعلام. بالنسبة لسلاسل الطول المسموح بها 0،
ترجع هذه الدالة 0؛ بالنسبة للتسلسلات الطويلة المسموح بها، نقطة الكود المحسوبة
يتم إرجاع؛ بالنسبة لجميع التشوهات الأخرى المسموح بها، استبدال Unicode
يتم إرجاع CHARACTER، حيث إنها ليس لها قيمة معقولة يمكن تحديدها.

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

لاحظ أن واجهة برمجة التطبيقات هذه تتطلب توضيحًا بين فك التشفير الناجح لـ "NUL"
حرف، وإرجاع خطأ (ما لم يتم تعيين علامة UTF8_CHECK_ONLY)، كما في
وفي كلتا الحالتين، يتم إرجاع 0. لتوضيح، عند عودة صفر، معرفة ما إذا كان الأول
بايت من "s" هو 0 أيضًا. إذا كان الأمر كذلك، كان الإدخال "NUL"؛ إذا لم يكن الأمر كذلك، كان الإدخال
خطأ.

تعتبر بعض نقاط التعليمات البرمجية مشكلة. هذه هي بدائل Unicode،
Unicode غير الأحرف، ونقاط التعليمات البرمجية أعلى من الحد الأقصى لـ Unicode وهو 0x10FFFF. بواسطة
بشكل افتراضي، تعتبر هذه نقاط رمز عادية، ولكن هناك مواقف معينة تستدعي ذلك
معاملة خاصة لهم. إذا كانت "الإشارات" تحتوي على UTF8_DISALLOW_ILLEGAL_INTERCHANGE،
يتم التعامل مع الفئات الثلاث على أنها تشوهات ويتم التعامل معها على هذا النحو. الأعلام
UTF8_DISALLOW_SURROGATE وUTF8_DISALLOW_NONCHAR وUTF8_DISALLOW_SUPER (المعنى
أعلى من الحد الأقصى القانوني لـ Unicode) لعدم السماح بهذه الفئات
بشكل فردي.

العلامات UTF8_WARN_ILLEGAL_INTERCHANGE، UTF8_WARN_SURROGATE، UTF8_WARN_NONCHAR،
و UTF8_WARN_SUPER سوف يتسبب في ظهور رسائل تحذيرية خاصة بكل منهما
الفئات، ولكن بخلاف ذلك تعتبر نقاط الكود صالحة (وليس
التشوهات). للحصول على فئة كلاهما يعامل على أنه تشوه ورفع
تحذير، حدد كلا من علامتي WARN و DISALLOW. (ولكن لاحظ أن التحذيرات
لا يتم رفعه إذا تم تعطيله معجميًا أو إذا تم تحديد UTF8_CHECK_ONLY أيضًا.)

تعتبر نقاط الكود الكبيرة جدًا (أعلى من 0x7FFF_FFFF) أكثر إشكالية من
الآخرين الذين هم فوق الحد الأقصى القانوني Unicode. هناك عدة أسباب:
أنها تتطلب ما لا يقل عن 32 بت لتمثيلها على منصات ASCII، ليست كذلك
يمكن تمثيله على الإطلاق على منصات EBCDIC، ومواصفات UTF-8 الأصلية
لم يتجاوز هذا الرقم مطلقًا (تم فرض حد 0x10FFFF الحالي لاحقًا). (ال
أما الأصغر منها، تلك التي تتناسب مع 32 بت، فيمكن تمثيلها بواسطة الأشعة فوق البنفسجية على ASCII
المنصات، ولكن ليس عن طريق IV، وهو ما يعني أن عدد العمليات التي يمكن أن تكون
يتم إجراؤها عليها مقيد تمامًا.) ترميز UTF-8 على منصات ASCII لـ
تبدأ نقاط الكود الكبيرة هذه ببايت يحتوي على 0xFE أو 0xFF. ال
ستؤدي علامة UTF8_DISALLOW_FE_FF إلى معاملتها على أنها تشوهات، بينما
السماح بنقاط رمز Unicode أصغر. (بالطبع سوف UTF8_DISALLOW_SUPER
تعامل مع جميع نقاط كود Unicode المذكورة أعلاه، بما في ذلك هذه، على أنها تشوهات.)
وبالمثل، يعمل UTF8_WARN_FE_FF تمامًا مثل إشارات WARN الأخرى، ولكنه ينطبق فقط
إلى نقاط الكود هذه.

جميع نقاط التعليمات البرمجية الأخرى المقابلة لأحرف Unicode، بما في ذلك الاستخدام الخاص
وأولئك الذين سيتم تعيينهم بعد، لا يعتبرون مشوهين أبدًا ولا يتم تحذيرهم أبدًا.

الأشعة فوق البنفسجية utf8n_to_uvchr(const U8 *s، STRLEN Curlen،
سترلين * ريتلين، أعلام U32)

utf8n_to_uvuni
بدلاً من ذلك، استخدم "utf8_to_uvchr_buf"، أو نادرًا، "utf8n_to_uvchr".

كانت هذه الوظيفة مفيدة للتعليمات البرمجية التي تريد التعامل مع كل من EBCDIC وASCII
الأنظمة الأساسية ذات خصائص Unicode، ولكن بدءًا من الإصدار 5.20 من Perl، ستبدأ الاختلافات
بين الأنظمة الأساسية تم جعلها في الغالب غير مرئية لمعظم التعليمات البرمجية، لذلك هذا
من غير المرجح أن تكون الوظيفة هي ما تريد. إذا كنت بحاجة إلى هذا الدقيق
الوظيفة، استخدم بدلاً من ذلك "NATIVE_TO_UNI(utf8_to_uvchr_buf(...))" أو
"NATIVE_TO_UNI(utf8n_to_uvchr(...))".

الأشعة فوق البنفسجية utf8n_to_uvuni(const U8 *s، STRLEN curlen،
سترلين * ريتلين، أعلام U32)

UTF8SKIP
تقوم بإرجاع عدد البايتات في الحرف المشفر UTF-8 والذي يكون أوله (ربما
فقط) تتم الإشارة إلى البايت بواسطة "s".

STRLEN UTF8SKIP(char*s)

utf8_distance
إرجاع عدد أحرف UTF-8 بين مؤشرات UTF-8 "a" و"b".

تحذير: استخدم فقط إذا كنت *تعرف* أن المؤشرات تشير إلى داخل نفس UTF-8
العازلة.

IV utf8_distance(const U8 *a، const U8 *b)

utf8_hop
قم بإرجاع مؤشر UTF-8 "s" الذي تم إزاحته بواسطة أحرف "off"، إما للأمام أو
الى الوراء.

تحذير: لا تستخدم ما يلي إلا إذا كنت *تعرف* أن كلمة "off" موجودة ضمن بيانات UTF-8
يُشار إليه بـ "s" * و* والذي يتم محاذاة "s" عند الإدخال على البايت الأول من
الحرف أو فقط بعد البايت الأخير من الحرف.

U8* utf8_hop(const U8 *s, I32 off)

utf8_length
قم بإرجاع طول السلسلة "s" المشفرة بـ UTF-8 بالأحرف. يتوقف عند
"ه" (شامل). إذا كان "e < s" أو إذا كان الفحص سينتهي بعد "e"، فسيتم إصدار صوت نعيق.

STRLEN utf8_length(const U8* s, const U8 *e)

utf8_to_bytes
ملاحظة: هذه الوظيفة تجريبية ويمكن تغييرها أو إزالتها دون إشعار.

يحول سلسلة "s" بطول "len" من UTF-8 إلى ترميز البايت الأصلي.
على عكس "bytes_to_utf8"، يؤدي هذا إلى الكتابة فوق السلسلة الأصلية، وتحديث "len" إلى
تحتوي على الطول الجديد. يُرجع صفرًا عند الفشل، مع ضبط "len" على -1.

إذا كنت بحاجة إلى نسخة من السلسلة، راجع "bytes_from_utf8".

U8* utf8_to_bytes(U8 *s, STRLEN *len)

utf8_to_uvchr_buf
إرجاع نقطة الكود الأصلية للحرف الأول في السلسلة "s" وهي
من المفترض أن يكون بتشفير UTF-8؛ يشير "إرسال" إلى 1 بعد نهاية "s".
* سيتم تعيين retlen على طول هذا الحرف بالبايت.

إذا كان الحرف "s" لا يشير إلى حرف UTF-8 جيد التكوين وكانت تحذيرات UTF8 كذلك
ممكّنًا، يتم إرجاع الصفر وتعيين *retlen (إذا لم تكن "retlen" فارغة) على -1. لو
تم إيقاف هذه التحذيرات، والقيمة المحسوبة، إذا كانت محددة جيدًا (أو Unicode
استبدال الحرف إذا لم يكن كذلك)، يتم إرجاعه بصمت، ويتم تعيين *retlen (إذا
"retlen" ليس NULL) لذا فإن ("s" + *retlen) هو الموضع المحتمل التالي في "s"
يمكن أن تبدأ شخصية غير مشوهة. راجع "utf8n_to_uvchr" للحصول على تفاصيل حول
عندما يتم إرجاع الحرف البديل.

الأشعة فوق البنفسجية utf8_to_uvchr_buf(const U8 *s, const U8 *send,
سترلين * ريتلين)

utf8_to_uvuni_buf
إهمال! من المخطط إزالة هذه الوظيفة من إصدار مستقبلي لـ Perl.
لا تستخدمه للرمز الجديد ؛ إزالته من التعليمات البرمجية الموجودة.

فقط في حالات نادرة جدًا يجب أن يتعامل الكود مع Unicode (مثل
على عكس الأصلي) نقاط التعليمات البرمجية. في تلك الحالات القليلة، استخدم
"NATIVE_TO_UNI(utf8_to_uvchr_buf(...))" بدلاً من ذلك.

إرجاع نقطة رمز Unicode (غير الأصلية) للحرف الأول في السلسلة
"s" والتي من المفترض أن تكون بتشفير UTF-8؛ "إرسال" يشير إلى 1 بعد نهاية
"س". سيتم تعيين "retlen" على طول هذا الحرف بالبايت.

إذا كان الحرف "s" لا يشير إلى حرف UTF-8 جيد التكوين وكانت تحذيرات UTF8 كذلك
ممكّنًا، يتم إرجاع الصفر وتعيين *retlen (إذا لم تكن "retlen" فارغة) على -1. لو
تم إيقاف هذه التحذيرات، والقيمة المحسوبة إذا كانت محددة جيدًا (أو Unicode
يتم إرجاع الحرف البديل، إذا لم يكن كذلك) بصمت، ويتم تعيين *retlen (إذا
"retlen" ليس NULL) لذا فإن ("s" + *retlen) هو الموضع المحتمل التالي في "s"
يمكن أن تبدأ شخصية غير مشوهة. راجع "utf8n_to_uvchr" للحصول على تفاصيل حول
عندما يتم إرجاع الحرف البديل.

الأشعة فوق البنفسجية utf8_to_uvuni_buf(const U8 *s, const U8 *send,
سترلين * ريتلين)

UVCHR_SKIP
تُرجع عدد البايتات المطلوبة لتمثيل نقطة الرمز "cp" عند تشفيرها
مثل UTF-8. "cp" هي نقطة رمز أصلية (ASCII أو EBCDIC) إذا كانت أقل من 255؛ أ
نقطة رمز Unicode خلاف ذلك.

STRLEN UVCHR_SKIP(الأشعة فوق البنفسجية)

uvchr_to_utf8
إضافة تمثيل UTF-8 لنقطة الكود الأصلية "uv" إلى نهاية الملف
سلسلة "د"؛ يجب أن يحتوي "d" على "UVCHR_SKIP(uv)+1" على الأقل (حتى "UTF8_MAXBYTES+1")
البايتات المجانية المتاحة. القيمة المرجعة هي المؤشر إلى البايت بعد النهاية
من الشخصية الجديدة. بعبارة أخرى،

d = uvchr_to_utf8(d, uv);

هي الطريقة الموصى بها للقول على نطاق واسع والتي تدرك الشخصية

*(d++) = uv;

تقبل هذه الوظيفة أي الأشعة فوق البنفسجية كمدخل. للمنع أو التحذير من استخدام كود غير Unicode
النقاط، أو تلك التي قد تكون مشكلة، راجع "uvchr_to_utf8_flags".

U8* uvchr_to_utf8(U8 *d، الأشعة فوق البنفسجية فوق البنفسجية)

uvchr_to_utf8_flags
إضافة تمثيل UTF-8 لنقطة الكود الأصلية "uv" إلى نهاية الملف
سلسلة "د"؛ يجب أن يحتوي "d" على "UVCHR_SKIP(uv)+1" على الأقل (حتى "UTF8_MAXBYTES+1")
البايتات المجانية المتاحة. القيمة المرجعة هي المؤشر إلى البايت بعد النهاية
من الشخصية الجديدة. بعبارة أخرى،

d = uvchr_to_utf8_flags(d, uv, flags);

أو في معظم الحالات،

د = uvchr_to_utf8_flags(d, uv, 0);

هذه هي طريقة القول المدركة لليونيكود

*(d++) = uv;

سيتم تحويل هذه الوظيفة إلى UTF-8 (وليس التحذير) حتى نقاط التعليمات البرمجية التي ليست كذلك
Unicode قانوني أو به مشكلات، ما لم تحتوي "العلامات" على واحد أو أكثر من العناصر
الأعلام التالية:

إذا كانت "uv" عبارة عن نقطة رمز بديلة لـ Unicode وتم تعيين UNICODE_WARN_SURROGATE، فسيتم تعيين
ستطلق الدالة تحذيرًا، بشرط تمكين تحذيرات UTF8. إذا بدلا من ذلك
تم تعيين UNICODE_DISALLOW_SURROGATE، وستفشل الوظيفة وترجع NULL. لو
تم تعيين كلتا العلامتين، وستقوم الوظيفة بالتحذير وإرجاع NULL.

تؤثر علامتا UNICODE_WARN_NONCHAR وUNICODE_DISALLOW_NONCHAR على كيفية تأثير
تتعامل الدالة مع Unicode بدون أحرف. وبالمثل، UNICODE_WARN_SUPER
وتؤثر علامتي UNICODE_DISALLOW_SUPER على معالجة نقاط التعليمات البرمجية الموجودة أعلاه
الحد الأقصى لـ Unicode هو 0x10FFFF. نقاط الكود أعلى من 0x7FFF_FFFF (وهي متساوية
أقل قابلية للحمل) يمكن تحذيره و/أو عدم السماح به حتى لو كان هناك كود Unicode أعلى من ذلك
يتم قبول النقاط بواسطة علامتي UNICODE_WARN_FE_FF وUNICODE_DISALLOW_FE_FF.

وأخيرًا، تحدد العلامة UNICODE_WARN_ILLEGAL_INTERCHANGE جميع العناصر الأربعة
فوق أعلام التحذير؛ ويقوم UNICODE_DISALLOW_ILLEGAL_INTERCHANGE بتحديد الأربعة
عدم السماح بالأعلام.

U8* uvchr_to_utf8_flags(U8 *d، الأشعة فوق البنفسجية، أعلام الأشعة فوق البنفسجية)

uvoffuni_to_utf8_flags
يجب استخدام هذه الوظيفة في ظروف خاصة جدًا فقط. بدلاً من،
تقريبا الكل الكود ينبغي تستخدم "uvchr_to_utf8" or "uvchr_to_utf8_flags".

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

للحصول على التفاصيل، راجع وصف "uvchr_to_utf8_flags".

U8* uvoffuni_to_utf8_flags(U8 *d، الأشعة فوق البنفسجية، أعلام الأشعة فوق البنفسجية)

uvuni_to_utf8_flags
بدلاً من ذلك، من المؤكد أنك تريد استخدام "uvchr_to_utf8" أو "uvchr_to_utf8_flags".

هذه الوظيفة هي مرادف مهمل لـ "uvoffuni_to_utf8_flags"، والتي في حد ذاتها،
على الرغم من عدم إهمالها، يجب استخدامها فقط في ظروف معزولة. هؤلاء
كانت الوظائف مفيدة للتعليمات البرمجية التي تريد التعامل مع كل من EBCDIC وASCII
الأنظمة الأساسية ذات خصائص Unicode، ولكن بدءًا من الإصدار 5.20 من Perl، ستبدأ الاختلافات
بين الأنظمة الأساسية تم جعلها في الغالب غير مرئية لمعظم التعليمات البرمجية، لذلك هذا
من غير المرجح أن تكون الوظيفة هي ما تريد.

U8* uvuni_to_utf8_flags(U8 *d، الأشعة فوق البنفسجية، أعلام الأشعة فوق البنفسجية)

المتغيرات خلق by "xsubpp" "xsubpp" داخلي وظائف


newXSproto
يُستخدم بواسطة "xsubpp" لربط XSUBs كغواصات Perl. يضيف نماذج بيرل الأولية إلى الغواصات.

XS_APIVERSION_BOOTCHECK
ماكرو للتحقق من أن إصدار Perl API الذي تم تجميع وحدة XS عليه
يطابق إصدار API لمترجم Perl الذي يتم تحميله فيه.

XS_APIVERSION_BOOTCHECK;

XS_VERSION
معرف الإصدار لوحدة XS. عادة ما يتم التعامل مع هذا تلقائيًا بواسطة
"ExtUtils::MakeMaker". راجع "XS_VERSION_BOOTCHECK".

XS_VERSION_BOOTCHECK
ماكرو للتحقق من أن متغير VERSION $ الخاص بوحدة PM يطابق متغير وحدة XS
متغير "XS_VERSION". تتم معالجة هذا عادةً تلقائيًا بواسطة "xsubpp". يرى
"التحقق من الإصدار: الكلمة الرئيسية" في perlxs.

XS_VERSION_BOOTCHECK;

الإصدارات


نسخة جديدة
إرجاع كائن إصدار جديد بناءً على ما تم تمريره في SV:

SV *sv = new_version(SV *ver);

لا يغير ما تم تمريره في الإصدار SV. راجع "upg_version" إذا كنت تريد ترقية الإصدار
SV.

SV* new_version(SV *ver)

prescan_version
التحقق من إمكانية تحليل سلسلة معينة ككائن إصدار، لكن لا يحدث ذلك
في الواقع إجراء التحليل. يمكن استخدام قواعد التحقق الصارمة أو المتساهلة. يستطيع
قم بتعيين عدد من متغيرات التلميح اختياريًا لحفظ كود التحليل في وقت ما
الترميز.

const char* prescan_version(const char *s, bool الصارمة,
const char** errstr،
منطقي *sqv,
كثافة العمليات *ssaw_decimal،
كثافة العمليات * العرض، بول * سلفا)

scan_version
يقوم أيضًا بإرجاع مؤشر إلى الحرف التالي بعد سلسلة الإصدار التي تم تحليلها
مثل ترقية ما تم تمريره في SV إلى عربة سكن متنقلة.

يجب استدعاء الوظيفة باستخدام SV موجود بالفعل

سيفرت = newSV(0)
s = scan_version(s, SV *sv, bool qv);

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

const char* scan_version(const char *s, SV *rv, bool qv)

upg_version
ترقية موضعية لـ SV المتوفر إلى كائن إصدار.

SV *sv = upg_version(SV *sv, bool qv);

إرجاع مؤشر إلى SV الذي تمت ترقيته. قم بتعيين qv المنطقي إذا كنت تريد فرضه
سيتم تفسير هذا SV على أنه إصدار "موسع".

SV* upg_version(SV *ver, bool qv)

كائن إصدار vcmp على دراية بـ cmp. يجب أن يكون كلا المعاملين قد تم تحويلهما بالفعل إلى
كائنات الإصدار.

إنت vcmp(SV *lhv، SV *rhv)

vnormal يقبل كائن الإصدار ويعيد تمثيل السلسلة التي تمت تسويتها. يتصل
مثل:

sv = vnormal(rv);

ملاحظة: يمكنك تمرير الكائن مباشرة أو SV الموجود داخل RV.

تم إعادة حساب SV الذي تم إرجاعه بمقدار 1.

SV* vnormal(SV *vs)

vnumify يقبل كائن الإصدار ويعيد تمثيل الفاصلة العائمة المقيسة.
اتصل مثل:

sv = vnumify(rv);

ملاحظة: يمكنك تمرير الكائن مباشرة أو SV الموجود داخل RV.

تم إعادة حساب SV الذي تم إرجاعه بمقدار 1.

SV* vnumify(SV *vs)

vsstringify
من أجل الحفاظ على الحد الأقصى من التوافق مع الإصدارات السابقة من Perl، هذا
ستُرجع الدالة إما تدوين النقطة العائمة أو النقاط المتعددة
التدوين، اعتمادًا على ما إذا كانت النسخة الأصلية تحتوي على نقطة واحدة أو أكثر،
على التوالي.

تم إعادة حساب SV الذي تم إرجاعه بمقدار 1.

SV* vsstringify(SV *vs)

vverify يتحقق من أن SV يحتوي على بنية داخلية صالحة لكائن الإصدار. هو - هي
قد يتم تمرير كائن الإصدار (RV) أو التجزئة نفسها (HV). إذا
الهيكل صالح، فإنه يقوم بإرجاع HV. إذا كانت البنية غير صالحة، فإنه يعود
باطل.

SV *hv = vverify(sv);

لاحظ أنه يؤكد فقط الحد الأدنى من البنية (حتى لا يتم الخلط بينه
حسب الفئات المشتقة التي قد تحتوي على إدخالات تجزئة إضافية):

SV* vverify(SV *vs)

تحذير الموت


croak هذه واجهة XS لوظيفة "الموت" الخاصة بـ Perl.

خذ نمط تنسيق sprintf وقائمة الوسيطات. وتستخدم هذه لتوليد
رسالة سلسلة. إذا لم تنتهي الرسالة بسطر جديد، فستكون كذلك
ممتد مع بعض الإشارة إلى الموقع الحالي في الكود، كما هو موضح
لـ "mess_sv".

سيتم استخدام رسالة الخطأ كاستثناء، بشكل افتراضي لإعادة التحكم إلى
أقرب "eval" مرفق، ولكنه يخضع للتعديل بواسطة $SIG{__DIE__}
معالج. على أية حال، لا تعود وظيفة "croak" بشكل طبيعي أبدًا.

لأسباب تاريخية، إذا كانت "pat" فارغة، فستكون محتويات "ERRSV" ($@) فارغة
يتم استخدامها كرسالة خطأ أو كائن بدلاً من إنشاء رسالة خطأ منها
الحجج. إذا كنت تريد رمي كائن غير سلسلة، أو إنشاء رسالة خطأ فيه
SV بنفسك، فمن الأفضل استخدام وظيفة "croak_sv"، التي لا تفعل ذلك
تنطوي على الضرب "ERRSV".

تشاءم باطل (const char *pat، ...)

croak_no_modify
يكافئ تمامًا "Perl_croak(aTHX_ "%s"، PL_no_modify)"، ولكنه ينشئ مقطعًا مختصرًا
رمز الكائن بدلاً من استخدام "Perl_croak". تعليمات برمجية أقل مستخدمة في مسارات رمز الاستثناء
يقلل من ضغط ذاكرة التخزين المؤقت لوحدة المعالجة المركزية.

croak_no_modify () باطلة

croak_sv
هذه واجهة XS لوظيفة "الموت" الخاصة بـ Perl.

"baseex" هي رسالة الخطأ أو الكائن. إذا كان مرجعا، سيتم استخدامه
كما هي. وإلا يتم استخدامه كسلسلة، وإذا لم ينتهي بسطر جديد
ثم سيتم تمديده مع بعض الإشارة إلى الموقع الحالي في الكود،
كما هو موضح في "mess_sv".

سيتم استخدام رسالة الخطأ أو الكائن كاستثناء، وسيعود بشكل افتراضي
التحكم إلى أقرب "تقييم" مرفق، ولكنه يخضع للتعديل بواسطة أ
معالج $SIG{__DIE__}. على أية حال، لن تعود الدالة "croak_sv" أبدًا
بشكل طبيعي.

للموت برسالة سلسلة بسيطة، قد تكون وظيفة "النعيق" أكثر ملاءمة.

باطل croak_sv(SV *baseex)

die يتصرف مثل "croak"، باستثناء نوع الإرجاع. يجب استخدامه فقط
حيث يكون نوع الإرجاع "OP *" مطلوبًا. لا ترجع الدالة فعليًا أبدًا.

OP * die(const char *pat, ...)

die_sv يتصرف مثل "croak_sv"، باستثناء نوع الإرجاع. ينبغي استخدامه
فقط عندما يكون نوع الإرجاع "OP *" مطلوبًا. الوظيفة أبدا في الواقع
عائدات.

OP * die_sv(SV *baseex)

vcroak هذه واجهة XS لوظيفة "الموت" الخاصة بـ Perl.

يعد "pat" و"args" نمط تنسيق بنمط sprintf ووسيطة مغلفة
قائمة. يتم استخدامها لإنشاء رسالة سلسلة. إذا لم تنتهي الرسالة
مع سطر جديد، ثم سيتم تمديده مع بعض الإشارة إلى التيار
الموقع في الكود، كما هو موضح في "mess_sv".

سيتم استخدام رسالة الخطأ كاستثناء، بشكل افتراضي لإعادة التحكم إلى
أقرب "eval" مرفق، ولكنه يخضع للتعديل بواسطة $SIG{__DIE__}
معالج. على أية حال، لا تعود وظيفة "croak" بشكل طبيعي أبدًا.

لأسباب تاريخية، إذا كانت "pat" فارغة، فستكون محتويات "ERRSV" ($@) فارغة
يتم استخدامها كرسالة خطأ أو كائن بدلاً من إنشاء رسالة خطأ منها
الحجج. إذا كنت تريد رمي كائن غير سلسلة، أو إنشاء رسالة خطأ فيه
SV بنفسك، فمن الأفضل استخدام وظيفة "croak_sv"، التي لا تفعل ذلك
تنطوي على الضرب "ERRSV".

باطلة vcroak (const char *pat، va_list *args)

vwarn هذه واجهة XS لوظيفة "التحذير" الخاصة بـ Perl.

يعد "pat" و"args" نمط تنسيق بنمط sprintf ووسيطة مغلفة
قائمة. يتم استخدامها لإنشاء رسالة سلسلة. إذا لم تنتهي الرسالة
مع سطر جديد، ثم سيتم تمديده مع بعض الإشارة إلى التيار
الموقع في الكود، كما هو موضح في "mess_sv".

ستتم كتابة رسالة الخطأ أو الكائن بشكل افتراضي إلى الخطأ القياسي، ولكن هذا
يخضع للتعديل بواسطة معالج $SIG{__WARN__}.

على عكس "vcroak"، لا يُسمح لـ "pat" أن تكون فارغة.

باطلة vwarn (const char *pat، va_list *args)

تحذير هذه واجهة XS لوظيفة "التحذير" الخاصة بـ Perl.

خذ نمط تنسيق sprintf وقائمة الوسيطات. وتستخدم هذه لتوليد
رسالة سلسلة. إذا لم تنتهي الرسالة بسطر جديد، فستكون كذلك
ممتد مع بعض الإشارة إلى الموقع الحالي في الكود، كما هو موضح
لـ "mess_sv".

ستتم كتابة رسالة الخطأ أو الكائن بشكل افتراضي إلى الخطأ القياسي، ولكن هذا
يخضع للتعديل بواسطة معالج $SIG{__WARN__}.

على عكس "croak"، لا يُسمح بأن تكون "pat" فارغة.

تحذير باطل (const char *pat، ...)

تحذير_sv هذه واجهة XS لوظيفة "التحذير" الخاصة بـ Perl.

"baseex" هي رسالة الخطأ أو الكائن. إذا كان مرجعا، سيتم استخدامه
كما هي. وإلا يتم استخدامه كسلسلة، وإذا لم ينتهي بسطر جديد
ثم سيتم تمديده مع بعض الإشارة إلى الموقع الحالي في الكود،
كما هو موضح في "mess_sv".

ستتم كتابة رسالة الخطأ أو الكائن بشكل افتراضي إلى الخطأ القياسي، ولكن هذا
يخضع للتعديل بواسطة معالج $SIG{__WARN__}.

للتحذير من خلال رسالة سلسلة بسيطة، قد تكون وظيفة "التحذير" أكثر ملاءمة.

تحذير باطل (SV *baseex)

غير موثقة وظائف


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

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

GetVars
Gv_AMupdate
PerlIO_clearrr
بيرليو_إغلاق
PerlIO_context_layers
بيرليو_eof
PerlIO_error
بيرليو_ملفينو
بيرليو_ملء
بيرليو_فلاش
بيرليو_get_base
PerlIO_get_bufsiz
بيرليو_get_cnt
بيرليو_get_ptr
بيرليو_قراءة
PerlIO_seek
بيرليو_set_cnt
PerlIO_set_ptrcnt
PerlIO_setlinebuf
بيرليو_stderr
بيرليو_stdin
PerlIO_stdout
بيرليو_تيل
PerlIO_unread
بيرليو_write
amagic_call
amagic_deref_call
Any_dup
atfork_lock
atfork_unlock
av_arylen_p
av_iter_p
block_gimme
call_atexit
قائمة المكالمات
calloc
cast_i32
cast_iv
cast_ulong
cast_uv
ck_warner
ck_warner_d
com.ckwarn
ckwarn_d
clone_params_del
clone_params_new
croak_memory_wrap
croak_nocontext
com.csighhandler
cx_dump
cx_dup
com.cxinc
ديب
deb_nocontext
com.debop
com.debprofdump
com.debstack
com.debstackptrs
com.delimcpy
despatch_signals
die_nocontext
dirp_dup
do_aspawn
do_binmode
do_Close
do_gv_dump
do_gvgv_dump
do_hv_dump
do_join
do_magic_dump
do_op_dump
do_open
do_open9
do_openn
do_pmop_dump
do_spawn
do_spawn_nowit
do_sprintf
do_sv_dump
do_taint
دورف
تهدئة
com.dowantarray
dump_eval
dump_form
dump_indent
dump_mstats
dump_sub
dump_vindent
filter_add
filter_del
filter_read
FoldEQ_latin1
form_nocontext
fp_dup
fprintf_nocontext
free_global_struct
free_tmps
get_context
get_mstats
get_op_descs
get_op_names
get_ppaddr
get_vtbl
gp_dup
gp_free
gp_ref
gv_AVadd
gv_HVadd
gv_IOadd
gv_SVadd
gv_add_by_type
gv_autoload4
gv_autoload_pv
gv_autoload_pvn
gv_autoload_sv
gv_check
gv_dump
gv_efullname
gv_efullname3
gv_efullname4
gv_fetchfile
gv_fetchfile_flags
gv_fetchpv
gv_fetchpvn_flags
gv_fetchsv
gv_fullname
gv_fullname3
gv_fullname4
gv_handler
gv_name_set
he_dup
hek_dup
hv_common
hv_common_key_len
hv_delayfree_ent
hv_eiter_p
hv_eiter_set
hv_free_ent
hv_ksplit
hv_name_set
hv_placeholders_get
hv_placeholders_set
hv_rand_set
hv_riter_p
hv_riter_set
ibcmp_utf8
init_global_struct
init_stacks
init_tm
instr
is_lvalue_sub
leave_scope
Load_module_nocontext
com.magic_dump
malloc
markstack_grow
mess_nocontext
com.mfree
mg_dup
mg_size
mini_mktime
com.moreswitches
mro_get_from_name
mro_get_private_data
mro_set_mro
mro_set_private_data
my_atof
my_atof2
my_bcopy
my_bzero
my_chsize
my_cxt_index
my_cxt_init
my_dirfd
my_exit
my_failure_exit
my_fflush_all
my_fork
my_lstat
my_memcmp
my_memset
my_p Close
my_popen
my_popen_list
my_setenv
my_socketpair
my_stat
my_strftime
newANONATTRSU
newANONHASH
newANONLIST
newANONSUB
newATTRSUB
newAVREF
newCVREF
صيغة جديدة
newGVREF
newGVgen
newGVgen_flags
newHVREF
newHVhv
newIO
newMYSUB
newPROG
newRV
newSUB
newSVREF
newSVpvf_nocontext
new_stackinfo
ninstr
op_refcnt_lock
op_refcnt_unlock
parser_dup
perl_alloc_using
perl_clone_using
pmop_dump
pop_scope
com.pregcomp
com.pregexec
pregfree
pregfree2
printf_nocontext
ptr_table_fetch
ptr_table_free
ptr_table_new
ptr_table_split
ptr_table_store
Push_scope
re_compile
re_dup_guts
re_intuit_start
re_intuit_string
إعادة تخصيص
reentrant_free
reentrant_init
reentrant_retry
reentrant_size
المرجع
reg_named_buff_all
reg_named_buff_exists
reg_named_buff_fetch
reg_named_buff_firstkey
reg_named_buff_nextkey
reg_named_buff_scalar
regclass_swash
regdump
regdupe_internal
regexec_flags
regfree_internal
com.regitcolors
regnext
تكرارcpy
rninstr
rsignal
rsignal_state
runops_debug
runops_standard
rvpv_dup
com.safesyscalloc
com.safesysfree
com.safesysmalloc
com.safesysrealloc
save_I16
save_I32
save_I8
save_adelete
save_aelem
save_aelem_flags
save_alloc
save_aptr
save_ary
save_bool
save_clearsv
save_delete
save_destructor
save_destructor_x
save_freeop
save_freepv
save_freesv
save_generic_pvref
save_generic_svref
save_gp
save_hash
save_hdelete
save_helem
save_helem_flags
save_hints
save_hptr
save_int
save_item
save_iv
save_list
save_long
save_mortalizesv
save_nogv
save_op
save_padsv_and_mortalize
save_pptr
save_pushi32ptr
save_pushptr
save_pushptrptr
save_re_context
save_scalar
save_set_svflags
save_shared_pvref
save_sptr
save_svref
save_vptr
savestack_grow
savestack_grow_cnt
scan_num
scan_vstring
بذرة
set_context
set_numeric_local
set_numeric_radix
set_numeric_standard
share_hek
si_dup
ss_dup
Stack_Grow
start_subparse
str_to_version
sv_2iv
sv_2pv
sv_2uv
sv_catpvf_mg_nocontext
sv_catpvf_nocontext
sv_dup
sv_dup_inc
sv_peek
sv_pvn_nomg
sv_setpvf_mg_nocontext
sv_setpvf_nocontext
swash_fetch
swash_init
sys_init
sys_init3
sys_intern_clear
sys_intern_dup
sys_intern_init
sys_term
taint_env
taint_proper
unlnk
com.unsharepvn
utf16_to_utf8
utf16_to_utf8_reversed
uvuni_to_utf8
vdeb
vform
vload_module
vnewSVpvf
com.vwarner
تحذير_nocontext
نذير
warner_nocontext
hisig
whosig_pv
whosig_pvn
whosig_sv

مؤلفون


حتى مايو 1997، كان جيف أوكاموتو يحتفظ بهذه الوثيقةokamoto@corp.hp.com>. إنها
يتم الاحتفاظ بها الآن كجزء من Perl نفسها.

مع الكثير من المساعدة والاقتراحات من دين روهريش، ومالكولم بيتي، وأندرياس كونيج،
بول هدسون، إيليا زاخاريفيتش، بول ماركيز، نيل باورز، ماثيو جرين، تيم بونس،
سبايدر بوردمان، وأولريش فايفر، وستيفن ماكامانت، وجوروسامي ساراثي.

قائمة API في الأصل بواسطة Dean Roehrich <roehrich@cray.com>.

تم التحديث ليتم إنشاؤه تلقائيًا من التعليقات الموجودة في المصدر بواسطة Benjamin Stuhl.

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



أحدث برامج Linux و Windows عبر الإنترنت