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

OnWorks فافيكون

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

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

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

برنامج:

اسم


perldata - أنواع بيانات بيرل

الوصف


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

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

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

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

$days # القيمة العددية البسيطة "أيام"
$days[28] # العنصر التاسع والعشرون من المصفوفة @days
$days{'Feb'} # قيمة "فبراير" من التجزئة %days
$ # يوم # الفهرس الأخير للمصفوفة @ days

يتم الإشارة إلى المصفوفات الكاملة (وشرائح المصفوفات والتجزئة) بالرمز "@" ، والذي يعمل كثيرًا مثل
كلمة "هؤلاء" أو "هؤلاء" موجودة في اللغة الإنجليزية، حيث تشير إلى وجود قيم متعددة
متوقعا.

days # ($ يوم [0] ، $ يوم [1] ، ... $ يوم [n])
days [3,4,5،3،4] # مثل ($ يوم [5] ، $ يوم [XNUMX] ، $ يوم [XNUMX])
@days{'a','c'} # مثل ($days{'a'},$days{'c'})

تتم الإشارة إلى التجزئة بأكملها بواسطة "%":

٪ days # (key1، val1، key2، val2 ...)

بالإضافة إلى ذلك، تتم تسمية الإجراءات الفرعية بحرف "&" الأولي، على الرغم من أن هذا اختياري عندما
لا لبس فيه، تمامًا كما أن كلمة "do" غالبًا ما تكون زائدة عن الحاجة في اللغة الإنجليزية. إدخالات جدول الرموز
يمكن تسميته بعلامة "*" أولية، لكنك لا تهتم بذلك حقًا حتى الآن (إذا كان :-).

كل نوع متغير له مساحة اسم خاصة به، كما هو الحال مع العديد من المعرفات غير المتغيرة. هذا
يعني أنه يمكنك، دون خوف من التعارض، استخدام نفس الاسم لمتغير عددي، an
مصفوفة أو تجزئة - أو ، في هذا الصدد ، لمقبض ملف ، مقبض دليل ، إجراء فرعي
اسم أو اسم تنسيق أو تسمية. هذا يعني أن $foo و@foo مختلفان
المتغيرات. وهذا يعني أيضًا أن $foo[1] جزء من @foo، وليس جزءًا من $foo. هذا ممكن
يبدو غريبا بعض الشيء، ولكن لا بأس، لأنه غريب.

لأن المراجع المتغيرة تبدأ دائمًا بـ "$" أو "@" أو "٪" ، وهي الكلمات "المحجوزة"
ليست محفوظة في الواقع فيما يتعلق بأسماء المتغيرات. هم . محفوظة فيما يتعلق
ومع ذلك، فإن التسميات ومقابض الملفات لا تحتوي على حرف خاص أولي. لا يمكنك
لديك مقبض ملف يسمى "سجل"، على سبيل المثال. تلميح: يمكنك قول "open(LOG,'logfile')"
بدلاً من "فتح (سجل،" ملف السجل ")". يؤدي استخدام مقابض الملفات ذات الأحرف الكبيرة أيضًا إلى تحسين إمكانية القراءة
ويحميك من التعارض مع الكلمات المحجوزة في المستقبل. قضية is مهم--"FOO"،
"Foo" و"foo" كلها أسماء مختلفة. الأسماء التي تبدأ بحرف أو شرطة سفلية
قد تحتوي أيضًا على أرقام وشرطات سفلية.

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

الأسماء التي تبدأ برقم قد تحتوي على أرقام أكثر فقط. الأسماء التي لا تبدأ بـ
يقتصر الحرف أو الشرطة السفلية أو الرقم أو علامة الإقحام (أي حرف التحكم) على حرف واحد
الحرف، على سبيل المثال، $% أو $$. (معظم أسماء الأحرف هذه لها تعريف محدد مسبقًا
أهمية لبيرل. على سبيل المثال، $$ هو معرف العملية الحالية.)

تحديد تحليل
حتى بيرل 5.18 ، كانت القواعد الفعلية للمعرف الصالح غامضة بعض الشيء.
ومع ذلك، بشكل عام، أي شيء محدد هنا يجب أن يعمل على الإصدارات السابقة من Perl، بينما
العكس -- حالات الحافة التي تعمل في الإصدارات السابقة، ولكن لم يتم تعريفها هنا --
ربما لن تعمل على الإصدارات الأحدث. كملاحظة جانبية مهمة، يرجى ملاحظة أن
ينطبق ما يلي فقط على معرفات كلمة المرور الموجودة في كود مصدر Perl ، وليس
المعرفات المقدمة من خلال المراجع الرمزية، والتي لديها قيود أقل بكثير.
إذا كنت تعمل تحت تأثير "استخدام utf8 ؛" pragma ، تطبق القواعد التالية:

/ (؟ [(\ p {Word} & \ p {XID_Start}) + [_]])
(?[ ( \p{Word} & \p{XID_Continue} ) ]) * /x

أي حرف "البدء" متبوعًا بأي عدد من أحرف "المتابعة". بيرل
يتطلب أن يتطابق كل حرف في المعرف أيضًا مع "\ w" (وهذا يمنع بعض
حالات إشكالية) ؛ ويقبل Perl أيضًا أسماء Identfier التي تبدأ بحرف
شرطة سفلية.

إذا لم يكن ضمن "استخدام utf8"، فسيتم التعامل مع المصدر على أنه ASCII + 128 عناصر تحكم إضافية، و
يجب أن تتطابق المعرفات

/ (؟ aa) (؟! \ d) \ w + / x

وهذا يعني أن أي حرف كلمة في نطاق ASCII، طالما أن الحرف الأول ليس حرفًا
رقم.

يوجد فاصلان للحزم في Perl: نقطتان مزدوجتان ("::") وعلامة اقتباس واحدة ("" ").
يمكن أن تبدأ المعرفات العادية أو تنتهي بنقطتين مزدوجتين، ويمكن أن تحتوي على عدة أجزاء
محددة بنقطتين مزدوجتين. علامات الاقتباس المفردة لها قواعد مماثلة، ولكن مع استثناء ذلك
فهي ليست قانونية في نهاية المعرف: أي أن "$'foo" و"$foo'bar" قانونيان،
لكن "$foo'bar'" ليس كذلك.

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

على الرغم من أنه يمكنك مزج النقطتين المزدوجتين مع علامات الاقتباس الفردية، إلا أن علامات الاقتباس يجب أن تأتي بعد علامة الاقتباس
النقطتان: "$ :::: 'foo" و "$ foo ::' bar" قانونيان ، لكن "$ :: ':: foo" و "$ foo' :: bar" ليسا كذلك.

معًا، تصبح القواعد النحوية التي تتطابق مع المعرف الأساسي

/
(؟(يُعرِّف)

(؟ & سيجيل)
(؟:
(؟&المعرف_العادي)
| \{ \s* (?&normal_identifier) ​​\s* \}
)
)

(؟: ::) * '؟
(؟ & basic_identifier)
(?: (?= (?: :: )+ '? | (?: :: )* ' ) (?&normal_identifier)) )?
(؟:::)*
)

# هل استخدام utf8 قيد التشغيل؟
(؟(؟{ (المتصل(0)) [8] & $ utf8 :: hint_bits})
(?&Perl_XIDS) (?&Perl_XIDC)*
| (?aa) (؟!\d) \w+
)
)
(؟ [&*\$\@\%])
(؟ (?[ ( \p{Word} & \p{XID_Start} ) + [_] ])) )
(؟ (?[ \p{Word} & \p{XID_Continue} ])) )
)
/x

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

· سيجيل، متبوعًا فقط بأرقام تطابق "\p{POSIX_Digit}"، مثل $0، أو $1، أو $10000.

· علامة متبوعة بعلامة إقحام وأي حرف من الأحرف "[][AZ^_?\]"، مثل $^V أو
$ ^] ، أو علامة سيجيل متبوعة بمطابقة حرف تحكم بدون مسافات ، وغير "NUL"
الخاصية "\p{POSIX_Cntrl}". نظرًا لغرابة تاريخية، إذا لم يكن يعمل ضمن "الاستخدام
utf8"، تعتبر الأحرف الـ 128 الموجودة في النطاق "[0x80-0xff]" بمثابة عناصر تحكم،
ويمكن استخدامها أيضًا في متغيرات الطول الواحد. ومع ذلك، فإن استخدام غير الرسومية
تم إهمال الأحرف اعتبارًا من الإصدار 5.22، وستتم إزالة الدعم لها في المستقبل
نسخة من بيرل. أحرف مسافة ASCII و "NUL" غير مسموح بها بالفعل ، لذلك هذا
يعني أن اسم متغير مكون من حرف واحد بهذا الاسم هو أي عنصر تحكم C0 آخر
سينتج عن "[0x01-0x1F]" أو "DEL" تحذير مهمل. بالفعل، تحت عنوان "الاستخدام
utf8"، يجب أن تتطابق الأحرف غير ASCII مع "Perl_XIDS". اعتبارًا من الإصدار 5.22، عندما لا يكون ضمن "استخدام"
utf8" عناصر التحكم C1 "[0x80-0x9F]"، بدون مسافة فاصلة، والواصلة الناعمة ("SHY")) تنشئ
تحذير موقوف.

· مثل ما سبق، سيجيل، يليه نص عار بين قوسين، حيث الأول
الحرف إما عبارة عن علامة إقحام متبوعة بأي حرف من الأحرف "[][AZ^_?\]"، مثل
"${^GLOBAL_PHASE}"، أو عنصر تحكم حرفي غير "NUL"، مثل "${\7LOBAL_PHASE}".
كما هو مذكور أعلاه، عندما لا تكون ضمن "استخدام utf8"، تكون الأحرف الموجودة في "[0x80-0xFF]"
تعتبر عناصر تحكم، ولكن اعتبارًا من الإصدار 5.22، أصبح استخدام أي عناصر غير رسومية أمرًا محظورًا
تم إهماله، واعتبارًا من الإصدار 5.20، تم إهمال استخدام أي عنصر تحكم حرفي لنطاق ASCII.
ستتم إزالة الدعم لهذه في إصدار مستقبلي من Perl.

· سيجيل متبوعًا بحرف واحد يطابق الخاصية "\p{POSIX_Punct}"، مثل
$! أو "٪ +" ماعدا الحرف "{" لا يعمل.

لاحظ أنه اعتبارًا من Perl 5.20 ، تم إهمال أحرف التحكم الحرفية في أسماء المتغيرات ؛
واعتبارًا من Perl 5.22 ، تم أيضًا إهمال أي أحرف غير رسومية أخرى.

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

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

كثافة العمليات ( )

توفر عملية الأعداد الصحيحة سياقًا عددًا لعامل التشغيل <>، الذي يستجيب بواسطة
قراءة سطر واحد من STDIN وإعادته إلى عملية الأعداد الصحيحة، والتي سيتم بعد ذلك
ابحث عن القيمة الصحيحة لهذا السطر وأرجعها. إذا، من ناحية أخرى، أنت تقول

نوع( )

ثم توفر عملية الفرز سياق القائمة لـ <>، والذي سيستمر في القراءة كل مرة
السطر المتاح حتى نهاية الملف، ثم قم بتمرير قائمة الأسطر هذه مرة أخرى إلى عملية الفرز
الروتينية ، والتي ستقوم بعد ذلك بفرز تلك السطور وإعادتها كقائمة لأي ملف
كان سياق هذا النوع.

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

عند استخدام براغما "استخدام التحذيرات" أو لغة بيرل -w خيار سطر الأوامر، قد ترى
تحذيرات حول الاستخدامات غير المجدية للثوابت أو الوظائف في "سياق الفراغ". سياق فارغ
تعني فقط أن القيمة قد تم تجاهلها ، مثل بيان يحتوي فقط على "fred" ؛ " أو
"com.getpwuid(0)؛". لا يزال يعتبر سياقًا عددًا للوظائف التي تهتم بما إذا كان أم لا
يتم استدعاؤهم في سياق القائمة.

قد تختار الإجراءات الفرعية المعرفة من قبل المستخدم الاهتمام بما إذا كان يتم استدعاؤها في فراغ أم لا،
العددية، أو سياق القائمة. ومع ذلك، لا تحتاج معظم الإجراءات الفرعية إلى الإزعاج. ذلك بسبب
يتم دمج كل من الحجم والقوائم تلقائيًا في القوائم. انظر "wantarray" في
perlfunc لكيفية تمييز سياق الاتصال الخاص بوظيفتك ديناميكيًا.

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

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

يتم تفسير القيمة العددية على أنها FALSE بالمعنى المنطقي إذا كانت غير محددة، فهي خالية
السلسلة أو الرقم 0 (أو السلسلة المكافئة له، "0")، وTRUE إذا كان أي شيء آخر.
السياق المنطقي هو مجرد نوع خاص من السياق القياسي حيث لا يوجد تحويل إلى ملف
يتم تنفيذ سلسلة أو رقم على الإطلاق.

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

لمعرفة ما إذا كانت سلسلة معينة عبارة عن رقم صالح غير الصفر، يكفي في بعض الأحيان القيام بذلك
اختبره مقابل كل من الرقم 0 وأيضًا المعجمي "0" (على الرغم من أن هذا سيؤدي إلى حدوث ضوضاء إذا
التحذيرات قيد التشغيل). وذلك لأن السلاسل التي ليست أرقامًا تعتبر 0، تمامًا كما تفعل
in AWK:

إذا ($str == 0 && $str ne "0") {
تحذير "هذا لا يبدو كرقم"؛
}

قد تكون هذه الطريقة هي الأفضل لأنك لن تتعامل مع رموز IEEE مثل "NaN" أو
"إنفينيتي" بشكل صحيح. وفي أوقات أخرى، قد تفضل تحديد ما إذا كانت بيانات السلسلة أم لا
يمكن استخدامها عدديا عن طريق الاتصال بـ بوسيكس::سترتود() وظيفة أو عن طريق فحص الخاص بك
سلسلة ذات تعبير عادي (كما هو موثق في perlre).

تحذير "يحتوي على أرقام غير" إذا كان /\D/;
تحذير "ليس عددًا طبيعيًا" ما لم /^\d+$/; # يرفض -3
تحذير "ليس عددًا صحيحًا" إلا إذا /^-?\d+$/; # يرفض +3
تحذير "ليس عددًا صحيحًا" ما لم / ^ [+ -]؟ \ d + $ /؛
تحذير "ليس رقمًا عشريًا" ما لم /^-?\d+\.?\d*$/; # يرفض .2
تحذير "ليس رقمًا عشريًا" ما لم /^-?(?:\d+(?:\.\d*)?|\.\d+)$/;
تحذير "لا تعويم C"
إلا /^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/;

طول المصفوفة هو قيمة عددية. قد تجد طول المصفوفة @days by
تقييم $#days، كما في مستشفى الدعم القتالي. ومع ذلك، هذا ليس طول المصفوفة؛ انها ال
منخفض للعنصر الأخير، وهو قيمة مختلفة حيث أنه يوجد عادة 0
عنصر. يؤدي تعيين $#days فعليًا إلى تغيير طول المصفوفة. تقصير ا
المصفوفة بهذه الطريقة تدمر القيم المتداخلة. إطالة مجموعة التي كانت في السابق
لا يؤدي التقصير إلى استعادة القيم التي كانت موجودة في تلك العناصر.

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

@مهما كان = ();
# $ أيا كان = -1 ؛

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

scalar(@whatever) == $#whatever + 1;

يختار بعض المبرمجين استخدام تحويل صريح حتى لا يتركوا أي شك:

$element_count = scalar(@whatever);

إذا قمت بتقييم التجزئة في سياق عددي، فسيتم إرجاع خطأ إذا كانت التجزئة فارغة. إن كان هناك
أي أزواج مفاتيح/قيمة، فإنها تُرجع صحيحًا؛ بتعبير أدق، القيمة التي تم إرجاعها عبارة عن سلسلة
يتكون من عدد الحاويات المستخدمة وعدد الحاويات المخصصة ، مفصولة بـ
شرطة مائلة. يعد هذا مفيدًا جدًا فقط لمعرفة ما إذا كان التجزئة الداخلية لـ Perl أم لا
أداء الخوارزمية ضعيف على مجموعة البيانات الخاصة بك. على سبيل المثال ، يمكنك لصق 10,000 شيء فيه
تجزئة ، ولكن تقييم٪ HASH في سياق عددي يكشف "1/16" ، وهو ما يعني واحدًا فقط من أصل
لقد تم لمس ستة عشر دلوًا، ومن المفترض أنها تحتوي على جميع عناصرك البالغ عددها 10,000. هذا
ليس من المفترض أن يحدث. إذا تم تقييم التجزئة المرتبطة في سياق عددي، فإن "SCALAR"
يتم استدعاء الأسلوب (مع الرجوع إلى "FIRSTKEY").

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

المفاتيح(%المستخدمين) = 1000; # تخصيص 1024 دلو

العددية قيمنا الصانعين
يتم تحديد القيم الحرفية الرقمية في أي من تنسيقات الفاصلة العائمة أو الأعداد الصحيحة التالية:

12345
12345.67
.23E-10 # رقم صغير جدًا
3.14_15_92# رقم مهم جدا
4_294_967_296 # الشرطة السفلية للوضوح
0xff # سداسي عشري
0xdead_beef # المزيد من السداسي
0377 # ثماني (الأرقام فقط، تبدأ بـ 0)
0b011011 # ثنائي
0x1.999ap-4 # النقطة العائمة السداسية العشرية (يلزم استخدام 'p')

يُسمح لك باستخدام الشرطة السفلية (الشرطة السفلية) بالأحرف الرقمية بين الأرقام
الوضوح (لكن ليس الشرط السفلية المتعددة في صف واحد: "23__500" ليس قانونيًا ؛ "23_500" هو).
يمكنك ، على سبيل المثال ، تجميع الأرقام الثنائية من خلال ثلاثة (كما هو الحال مع وسيطة وضع نمط Unix
مثل 0b110_100_100) أو بأربعة (لتمثيل القضم، كما في 0b1010_0110) أو في غيرها
المجموعات.

عادةً ما يتم تحديد القيم الحرفية للسلسلة بواسطة علامات اقتباس مفردة أو مزدوجة. إنهم يعملون كثيرًا
مثل علامات الاقتباس في أصداف Unix القياسية: تخضع القيم الحرفية للسلسلة ذات علامات الاقتباس المزدوجة إلى
شرطة مائلة عكسية واستبدال متغير؛ السلاسل ذات علامات الاقتباس المفردة ليست (باستثناء "\'" و
"\\"). تنطبق قواعد الخط المائل العكسي المعتادة على النمط C لإنشاء أحرف مثل السطر الجديد،
علامة التبويب ، وما إلى ذلك ، بالإضافة إلى بعض الأشكال الأكثر غرابة. راجع "عوامل التشغيل المشابهة للاقتباس والاقتباس" في
perlop للحصول على قائمة.

التمثيلات السداسية العشرية أو الثماني أو الثنائية في السلسلة الحرفية (على سبيل المثال '0xff') ليست كذلك
يتم تحويلها تلقائيًا إلى تمثيلها الصحيح. ال عرافة() أكتوبر () وظائف
إجراء هذه التحويلات لك. راجع "hex" في perlfunc و"oct" في perlfunc للمزيد
تفاصيل.

يمكن أن تبدأ النقطة العائمة السداسية العشرية تمامًا مثل النقطة العائمة السداسية العشرية، ويمكن أن تكون كذلك
متبوعًا بجزء سداسي عشري كسري اختياري ، ولكن يجب أن يتبعه "p" ، و
علامة اختيارية وقوة اثنين. التنسيق مفيد لتقديم العرض بدقة
قيم الفاصلة العائمة، وتجنب التحويلات من أو إلى النقطة العائمة العشرية، و
وبالتالي تجنب الخسارة المحتملة في الدقة. لاحظ أنه في حين أن معظم المنصات الحالية
استخدم الفاصلة العائمة IEEE 64 ذات 754 بت، ولكن لا يستخدمها الجميع. مصدر محتمل آخر لـ (منخفض
order) هي أوضاع تقريب النقطة العائمة، والتي يمكن أن تختلف بين وحدات المعالجة المركزية (CPUs)،
أنظمة التشغيل والمترجمين والتي لا يتحكم فيها Perl.

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

السعر = $ 100 ؛ # غير محرف
طباعة "السعر بالدولار. \ n"؛ # محرف

لا يوجد استيفاء مزدوج في لغة Perl، لذلك يتم ترك الـ 100 دولار كما هي.

بشكل افتراضي، تستخدم أرقام الفاصلة العائمة المستبدلة داخل السلاسل النقطة (".") باعتبارها
الفاصل العشري. إذا كانت "استخدام الإعدادات المحلية" سارية المفعول ، و بوسيكس :: setlocale () وقد دعا،
يتأثر الحرف المستخدم للفاصل العشري بالإعدادات المحلية LC_NUMERIC. يرى
بيرلوكال و POSIX.

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

$ who = "Larry" ؛
طباعة PASSWD "${who}::0:0:Superuser:/:/bin/Perl\n";
طباعة "نستخدم ${who}speak عندما يكون ${who} هنا.\n";

بدون الأقواس ، كان بيرل سيبحث عن $ whospeak و $ who :: 0 و "$ who's"
عامل. سيكون المتغيران الأخيران هما $ 0 والمتغير $ s في (المفترض) non-
الحزمة الموجودة "من".

في الواقع ، يُجبر المعرف البسيط داخل مثل هذه curlies على أن يكون سلسلة ، وبالمثل
ضمن منخفض التجزئة. لا حاجة للاقتباس. مثالنا السابق، $days{'Feb'} يمكن أن يكون
مكتوبة كـ $days{Feb} وسيتم افتراض عروض الأسعار تلقائيًا. ولكن أي شيء أكثر من ذلك
سيتم تفسير معقدة في منخفض كتعبير. هذا يعني على سبيل المثال
أن "$version{2.0}++" يعادل "$version{2}++"، وليس "$version{'2.0'}++".

ملصقات خاصة يطفو على السطح نقطة: انفينتي (المدفعية) ليس رقما (نان)

تتضمن قيم النقطة العائمة القيم الخاصة "Inf" و"NaN"، للانهاية وnot-a-.
رقم. يمكن أن تكون اللانهاية سلبية أيضًا.

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

اللانهاية واللارقم لهما قواعد حسابية خاصة بهما. القاعدة العامة
هو أنها "معدية": "Inf" زائد واحد هو "Inf"، و "NaN" زائد واحد هو "NaN".
تصبح الأمور مثيرة للاهتمام عندما تجمع بين اللانهاية والأرقام: "Inf" ناقص
"Inf" و"Inf" مقسومين على "INf" هما "NaN" (بينما "Inf" بالإضافة إلى "Inf" هو "Inf" و"Inf"
مرات "Inf" هو "Inf"). "NaN" مثير للفضول أيضًا لأنه لا يساوي أي رقم،
بما فيها نفسها: "NaN"! = "NaN".

لا يفهم Perl "Inf" و "NaN" على أنهما حرفية رقمية ، لكن يمكنك أن تجعلهما
السلاسل النصية ، وسيقوم Perl بتحويلها حسب الحاجة: "Inf" + 1. (مع ذلك ، يمكنك استيرادها
من امتداد POSIX؛ "استخدم POSIX qw(Inf NaN);" ثم استخدمها كأحرف حرفية.)

لاحظ أنه في الإدخال (من سلسلة إلى رقم) تقبل Perl "Inf" و "NaN" في أشكال عديدة. قضية
يتم تجاهله، ويتم فهم النماذج الخاصة بـ Win32 مثل "1.#INF"، ولكن عند إخراج الملف
يتم تطبيع القيم إلى "Inf" و"NaN".

التجريبية سلاسل

يتم تحليل حرف من النموذج "v1.20.300.4000" كسلسلة مكونة من أحرف بها
الأعداد الترتيبية المحددة. هذا النموذج ، المعروف باسم v-strings ، يوفر بديلاً أكثر
طريقة قابلة للقراءة لإنشاء سلاسل، بدلاً من استخدام طريقة أقل قابلية للقراءة إلى حد ما
نموذج الاستيفاء "\x{1}\x{14}\x{12c}\x{fa0}". وهذا مفيد لتمثيل Unicode
السلاسل، ولمقارنة "أرقام" الإصدار باستخدام عوامل مقارنة السلاسل، "cmp"،
"gt" و"lt" وما إلى ذلك. إذا كان هناك نقطتان أو أكثر في الحرف الحرفي، فقد تكون الحرف "v" البادئة
محذوف.

طباعة v9786 ؛ # يطبع SMILEY، "\x{263a}"
طباعة الإصدار 102.111.111؛ # طباعة "فو"
طباعة 102.111.111 ؛ # نفس

يتم قبول مثل هذه القيم الحرفية من خلال كل من "يتطلب" و"يستخدم" لإجراء فحص الإصدار. ملحوظة
أن استخدام سلاسل v لعناوين IPv4 ليس محمولاً إلا إذا كنت تستخدم أيضًا
inet_aton()/inet_ntoa () إجراءات حزمة المقبس.

لاحظ أنه منذ Perl 5.8.1 ، فإن سلاسل v أحادية الرقم (مثل "v65") ليست v-strings
قبل عامل التشغيل "=>" (والذي يُستخدم عادةً لفصل مفتاح التجزئة عن قيمة التجزئة)؛
وبدلاً من ذلك يتم تفسيرها على أنها سلاسل حرفية ('v65'). كانت سلاسل v من Perl
من 5.6.0 إلى Perl 5.8.0، لكن ذلك سبب المزيد من الارتباك والكسر أكثر من نفعه. متعدد الأرقام
تستمر سلاسل v مثل "v65.66" و 65.66.67 في أن تكون سلاسل v دائمًا.

ملصقات خاصة الحرفيين

تمثل القيم الحرفية الخاصة __FILE__ و__LINE__ و__PACKAGE__ اسم الملف الحالي،
رقم السطر واسم الحزمة عند هذه النقطة في البرنامج الخاص بك. __SUB__ يعطي إشارة إلى
الروتين الفرعي الحالي. يمكن استخدامها فقط كرموز منفصلة ؛ لن يكونوا كذلك
محرف في السلاسل. إذا لم تكن هناك حزمة حالية (بسبب وجود "حزمة؛" فارغة)
التوجيه)، __PACKAGE__ هي القيمة غير المحددة. (لكن "الحزمة؛" الفارغة لم تعد موجودة
مدعوم ، اعتبارًا من الإصدار 5.10.) خارج الروتين الفرعي ، __SUB__ هي القيمة غير المحددة.
__SUB__ متاح فقط في الإصدار 5.16 أو أعلى، وفقط مع "استخدام الإصدار 5.16" أو "استخدام الميزة"
إعلان "current_sub"".

يمكن استخدام حرفي التحكم ^D و^Z والرموز المميزة __END__ و__DATA__ في
يشير إلى النهاية المنطقية للبرنامج النصي قبل النهاية الفعلية للملف. أي نص تالي
تم تجاهله.

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

راجع SelfLoader لمزيد من الوصف لـ __DATA__ ومثال لاستخدامه. لاحظ أنك
لا يمكن القراءة من معالج ملف DATA في كتلة BEGIN: يتم تنفيذ كتلة BEGIN في أقرب وقت
كما يظهر (أثناء التجميع) ، عند هذه النقطة __DATA__ المقابلة (أو __END__)
لم يتم رؤية الرمز المميز بعد.

كلمات عارية

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

قد يرغب بعض الأشخاص في حظر الكلمات العارية تمامًا. إذا قلت

استخدام "الغواصات" الصارمة؛

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

مجموعة استيفاء

يتم تحريف المصفوفات والشرائح في سلاسل ذات علامات اقتباس مزدوجة من خلال ربط العناصر بها
المحدد المحدد في المتغير $" ($LIST_SEPARATOR إذا كان "استخدام اللغة الإنجليزية؛" هو
محدد)، المساحة بشكل افتراضي. ما يلي يعادل:

$ temp = Join ($ "،ARGV) ؛
نظام "صدى درجة الحرارة $"؛

نظام "echo @ARGV" ؛

ضمن أنماط البحث (التي تخضع أيضًا لاستبدال علامات الاقتباس المزدوجة) يوجد
غموض مؤسف: هل يجب تفسير "/$foo[bar]/" على أنه "/${foo[bar]/" (حيث
"[bar]" هي فئة أحرف للتعبير العادي) أو كـ "/${foo[bar]}/" (حيث
"[bar]" هو الحرف السفلي للمصفوفة @foo)؟ إذا لم يكن @foo موجودًا بطريقة أخرى، فهو موجود
ومن الواضح أن فئة الشخصية. إذا كان @foo موجودًا، فسيقوم Perl بتخمين جيد حول "[bar]" و
هو دائما تقريبا على حق. إذا كان التخمين خاطئًا، أو إذا كنت مصابًا بجنون العظمة فحسب، فيمكنك ذلك
فرض التفسير الصحيح باستخدام الأقواس المتعرجة على النحو الوارد أعلاه.

إذا كنت تبحث عن معلومات حول كيفية استخدام المستندات هنا، والتي كانت موجودة هنا،
تم نقل ذلك إلى "عملاء يشبهون الاقتباس والاقتباس" في perlop.

قائمة قيمنا الصانعين
تتم الإشارة إلى قيم القائمة عن طريق فصل القيم الفردية بفواصل (وإحاطة القائمة
بين قوسين حيث تقتضي الأسبقية ذلك):

(قائمة)

في سياق لا يتطلب قيمة قائمة، فإن قيمة ما يبدو أنه قائمة حرفية هي
ببساطة قيمة العنصر الأخير ، كما هو الحال مع عامل الفاصلة C. على سبيل المثال،

foo = ('cc'، '-E'، $ bar) ؛

يعين قيمة القائمة بالكامل للمصفوفةfoo ، لكن

$foo = ('cc', '-E', $bar);

يخصص قيمة المتغير $ bar للمتغير القياسي $ foo. لاحظ أن قيمة أ
المصفوفة الفعلية في السياق العددي هي طول المصفوفة؛ ما يلي يعين القيمة
3 إلى $foo:

foo = ('cc'، '-E'، $ bar) ؛
$foo = @foo; # $foo يحصل على 3

قد يكون لديك فاصلة اختيارية قبل قوس الإغلاق لقائمة حرفية، لذلك
تستطيع أن تقول:

foo = (
1,
2,
3,
);

لاستخدام مستند هنا لتعيين مصفوفة، سطر واحد لكل عنصر، يمكنك استخدام أحد الأساليب
مثله:

@الصلصات = <
الطماطم العادية
طماطم حارة
شيلي الخضراء
البيستو
خمر أبيض
End_Lines

تقوم القوائم بالاستيفاء التلقائي للقوائم الفرعية. أي عندما يتم تقييم LIST ، كل منها
يتم تقييم عنصر القائمة في سياق القائمة ، وتكون قيمة القائمة الناتجة هي
محرف في LIST تمامًا كما لو كان كل عنصر فرديًا عضوًا في LIST. هكذا
تفقد المصفوفات والتجزئة هويتها في قائمة - القائمة

(@foo,@bar,&SomeSub,%glarch)

يحتوي على جميع عناصر @foo متبوعة بجميع عناصر @bar متبوعة بالكل
العناصر التي يتم إرجاعها بواسطة الروتين الفرعي المسمى SomeSub يتم استدعاؤها في سياق القائمة، متبوعة بـ
أزواج المفتاح/القيمة لـ %glarch. لإنشاء مرجع قائمة يفعل ذلك لا أقحم، انظر
perlref.

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

يجمع هذا الاستيفاء مع حقيقة وجود قوسي الفتح والإغلاق
اختيارية (إلا عند الضرورة للأسبقية) وقد تنتهي القوائم بفاصلة اختيارية
للإشارة إلى أن الفواصل المتعددة داخل القوائم عبارة عن بناء جملة قانوني. القائمة "1،،3" هي أ
تسلسل قائمتين ، "1" و 3 ، تنتهي أولهما بتلك الفاصلة الاختيارية.
"1,,3" هو "(1,),(3)" هو "1,3" (وبالمثل بالنسبة لـ "1,,,3" هو "(1,),(,),3" هو "1,3" ،XNUMX" وهكذا
on.) لا يعني ذلك أننا ننصحك باستخدام هذا التشويش.

يمكن أيضًا كتابة قيمة قائمة مثل المصفوفة العادية. يجب عليك وضع القائمة
بين قوسين لتجنب الغموض. على سبيل المثال:

# Stat إرجاع قيمة القائمة.
$ time = (stat ($ file)) [8] ؛

# خطأ SYNTAX هنا.
$time = stat($file)[8]; # عفوًا، نسيت الأقواس

# ابحث عن رقم سداسي عشري.
$hexdigit = ('a','b','c','d','e','f')[$digit-10];

# "عامل الفاصلة العكسية".
return (pop(@foo),pop(@foo))[0];

لا يجوز تعيين القوائم إلا عندما يكون تعيين كل عنصر من عناصر القائمة قانونيًا إلى:

($ a، $ b، $ c) = (1، 2، 3) ؛

($ map {'red'}، $ map {'blue'}، $ map {'green'}) = (0x00f، 0x0f0، 0xf00)؛

استثناء لهذا هو أنه يمكنك تعيين "undef" في قائمة. هذا مفيد ل
التخلص من بعض القيم المرجعة للدالة:

($dev, $ino, undef, undef, $uid, $gid) = stat($file);

اعتبارًا من الإصدار Perl 5.22، يمكنك أيضًا استخدام "(undef)x2" بدلاً من "undef, undef". (يمكنك أيضًا القيام بذلك
"($x) x 2"، وهو أقل فائدة، لأنه يتم تعيينه لنفس المتغير مرتين،
تحطيم القيمة الأولى المخصصة.)

يُرجع تعيين القائمة في السياق العددي عدد العناصر التي تنتجها القائمة
التعبير على الجانب الأيمن من المهمة:

$x = (($foo,$bar) = (3,2,1)); # اضبط $x على 3، وليس 2
$ x = (($ foo، $ bar) = f ())؛ # قم بتعيين $ x على عدد مرات إرجاع f ()

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

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

$count = () = $string =~ /\d+/g;

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

$count = $string =~ /\d+/g;

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

قد يكون العنصر الأخير في مهمة القائمة عبارة عن مصفوفة أو تجزئة:

($a، $b، @rest) = تقسيم؛
my($a, $b, %rest) = @_;

يمكنك بالفعل وضع مصفوفة أو تجزئة في أي مكان في القائمة، ولكن الأول في القائمة
سوف يمتص كل القيم، وأي شيء بعده سوف يصبح غير محدد. هذا قد يكون
مفيد في أ لي() or محلي().

يمكن تهيئة التجزئة باستخدام قائمة حرفية تحتوي على أزواج من العناصر التي سيتم تفسيرها على أنها
مفتاح وقيمة:

# نفس تعيين الخريطة أعلاه
%map = ('red',0x00f,'blue',0x0f0,'green',0xf00);

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

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

%خريطة = (
أحمر => 0x00f،
أزرق => 0x0f0 ،
أخضر => 0xf00 ،
);

أو لتهيئة مراجع التجزئة لاستخدامها كسجلات:

تفصيل دولار = {
ساحرة => 'Mable the Merciless' ،
قطة => "رقيق الشرس" ،
التاريخ => '10 / 31/1776 '،
};

أو لاستخدام معلمة الاستدعاء حسب الاسم للوظائف المعقدة:

حقل $ = $query->radio_group(
name => "group_name" ،
القيم => ['eenie','meenie','minie'],
الافتراضي => 'مينى'،
فاصل السطر => "صحيح"،
تسميات => \٪ تسميات
);

لاحظ أن مجرد تهيئة التجزئة بهذا الترتيب لا يعني ظهورها
بهذا الترتيب. راجع "الفرز" في perlfunc للحصول على أمثلة حول كيفية ترتيب الإخراج
ترتيب.

إذا ظهر المفتاح أكثر من مرة في قائمة مُهيئ التجزئة، فسيكون هذا هو التواجد الأخير
يفوز:

٪ دائرة = (
المركز => [5، 10]،
المركز => [27، 9]،
نصف القطر => 100،
اللون => [0xDF، 0xFF، 0x00]،
نصف القطر => 54،
);

# مثل
٪ دائرة = (
المركز => [27، 9]،
اللون => [0xDF، 0xFF، 0x00]،
نصف القطر => 54،
);

يمكن استخدام هذا لتوفير إعدادات افتراضية يمكن تجاوزها:

# من القيم في %args لها الأولوية على %config_defaults
%config = (%config_defaults, %args);

نصوص
يمكن الوصول إلى مصفوفة واحدة في كل مرة عن طريق تحديد علامة الدولار ("$") ، ثم
اسم المصفوفة (بدون البادئة "@")، ثم الحرف المنخفض داخل قوسين مربعين.
فمثلا:

@myarray = (5, 50, 500, 5000);
طباعة "العنصر الثالث هو"، $myarray[2]، "\n";

تبدأ مؤشرات المصفوفة بالرقم 0. ويستعيد الرمز السالب قيمته من النهاية.
في مثالنا، كان $myarray[-1] يساوي 5000، وكان $myarray[-2] يساوي 500.

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

% العلماء =
(
"نيوتن" => "إسحاق"،
"أينشتاين" => "ألبرت"،
"داروين" => "تشارلز" ،
"Feynman" => "ريتشارد" ،
);

طباعة "اسم داروين الأول" ، علماء $ {"داروين"} ، "\ n"؛

يمكنك أيضًا إدراج قائمة للحصول على عنصر واحد منها:

$dir = (getpwnam("الشيطان"))[7];

متعدد الأبعاد مجموعة محاكاة
يمكن محاكاة المصفوفات متعددة الأبعاد عن طريق اشتراك التجزئة في القائمة. العناصر
من القائمة يتم ربطها بفاصل منخفض (راجع "$;" في perlvar).

$فو{$a,$b,$c}

ما يعادل

$foo{الانضمام($;, $a, $b, $c)}

الفاصل المنخفض الافتراضي هو "\034"، وهو نفس الفاصل SUBSEP الموجود في AWK.

شرائح
تصل الشريحة إلى عدة عناصر من القائمة أو المصفوفة أو التجزئة في وقت واحد باستخدام ملف
قائمة المشتركين. إنها أكثر ملاءمة من كتابة العناصر الفردية كـ
قائمة القيم العددية المنفصلة.

($له، $لها) = @folks[0,-1]; # شريحة المصفوفة
@them = @folks[0 .. 3]; # شريحة المصفوفة
($who, $home) = @ENV{"USER", "HOME"}; #شريحة تجزئة
($uid, $dir) = (getpwnam("daemon"))[2,7]; #شريحة القائمة

نظرًا لأنه يمكنك تعيين قائمة من المتغيرات ، يمكنك أيضًا تعيين مصفوفة أو تجزئة
شريحة.

@days[3..5] = qw/الأربعاء الخميس الجمعة/;
@colors{'أحمر','أزرق','أخضر'}
= (0xff0000, 0x0000ff, 0x00ff00);
@folks[0, -1] = @folks[-1, 0];

المهام السابقة تعادل تماما

($days[3], $days[4], $days[5]) = qw/الأربعاء الخميس الجمعة/;
($ colours {'red'}، $ colors {'blue'}، $ colors {'green'})
= (0xff0000, 0x0000ff, 0x00ff00);
($folks[0], $folks[-1]) = ($folks[-1], $folks[0]);

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

foreach (array [4 .. 10]) {s / peter / paul /}

foreach (@hash{qw[key1 key2]}) {
s/^\s+//; # قطع المسافة البيضاء الرائدة
s/\s+$//; # قطع المسافة البيضاء الزائدة
ق / (\ w +) / \ u \ L $ 1 / ز ؛ # كلمات "titlecase"
}

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

@a = ()[0,1]; # @a لا يحتوي على عناصر
@b = (@a)[0,1]; # @b لا يحتوي على عناصر
@c = (sub{}->())[0,1]; # @c لا يحتوي على عناصر
d = ('a'، 'b') [0,1،XNUMX] ؛ # @ د يحتوي على عنصرين
e = (d) [0,1,8,9،XNUMX،XNUMX،XNUMX] ، #e أربعة عناصر
@f = (@d)[8,9]; # @f له عنصرين

وهذا يجعل من السهل كتابة حلقات تنتهي عند إرجاع قائمة فارغة:

while (($ home، $ user) = (getpwent) [7,0،XNUMX]) {
printf "٪ -8s٪ s \ n" ، مستخدم $ ، منزل $ ؛
}

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

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

@a = qw/الأول الثاني الثالث/;
٪ h = (الأول => 'A' ، والثاني => 'B') ؛
$t = @a[0, 1]; # $t أصبح الآن "الثاني"
$u = @h{'الأول', 'الثاني'}; # $u أصبح الآن "B"

إذا كنت في حيرة من أمرك بشأن سبب استخدامك للرمز "@" هناك على شريحة التجزئة بدلاً من "%"، فكر في ذلك
منه مثل هذا. يتحكم نوع القوس (مربع أو مجعد) فيما إذا كان عبارة عن مصفوفة أم ملف
التجزئة التي يجري النظر فيها. من ناحية أخرى، الرمز البادئ ('$' أو '@') على المصفوفة أو
تشير التجزئة إلى ما إذا كنت تحصل على قيمة مفردة (عددية) أو قيمة جمع (a
قائمة).

المفتاح/القيمة مزيج شرائح

بدءًا من Perl 5.20، تعد عملية شريحة التجزئة التي تحمل الرمز % نوعًا مختلفًا من الشريحة
عملية تُرجع قائمة بأزواج المفاتيح/القيم بدلاً من القيم فقط:

%h = (blonk => 2, foo => 3, squink => 5, bar => 8);
%subset = %h{'foo', 'bar'}; # شريحة تجزئة المفتاح/القيمة
# % مجموعة فرعية الآن (foo => 3, bar => 8)

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

قيمة المؤشر مجموعة شرائح

على غرار شرائح تجزئة المفتاح / القيمة (والمقدمة أيضًا في Perl 5.20) ، شريحة الصفيف٪
يُرجع بناء الجملة قائمة بأزواج الفهرس / القيمة:

@a = "a".."z";
@list = %a[3,4,6];
# @list الآن (3، "d"، 4، "e"، 6، "g")

Typeglobs مقابض الملفات
يستخدم Perl نوعًا داخليًا يسمى a الطباع للاحتفاظ بإدخال جدول الرموز بالكامل. ال
بادئة الكتابة الخاصة بـ typeglob هي "*"، لأنها تمثل جميع الأنواع. كان هذا هو
الطريقة المفضلة لتمرير المصفوفات والتجزئة حسب المرجع إلى دالة، ولكن الآن أصبح لدينا
مراجع حقيقية نادرا ما تكون مطلوبة.

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

*هذا = *ذلك؛

يجعل $this اسمًا مستعارًا لـ $that، @this اسمًا مستعارًا لـ @that، %this اسمًا مستعارًا لـ %that، &this
اسم مستعار لـ &that، وما إلى ذلك. والأكثر أمانًا هو استخدام مرجع. هذا:

محلي * هنا :: أزرق = \ $ هناك :: أخضر ؛

يجعل $Here::blue اسمًا مستعارًا مؤقتًا لـ $ There::green، لكنه لا يجعل @Here::blue اسمًا مستعارًا
الاسم المستعار لـThere :: green ، أو٪ Here :: blue ، اسم مستعار لـ٪ There :: green ، إلخ. انظر "الرمز
الجداول "في بيرلمود لمزيد من الأمثلة على هذا. على الرغم من أن هذا قد يبدو غريبًا ، هذا هو ملف
أساس نظام الاستيراد / التصدير الكامل للوحدة.

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

$fh = *STDOUT;

أو ربما كمرجع حقيقي، مثل هذا:

$fh = \*STDOUT;

راجع perlsub للحصول على أمثلة لاستخدام هذه الملفات كمقابض غير مباشرة في الوظائف.

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

فتح جديد فرعي {
مساري $ = التحول ؛
محلي * FH ؛ # ليس لي!
افتح (FH، $path) أو قم بإرجاع undef؛
العودة *ف.
}
$ fh = newopen ('/ الخ / باسود')؛

الآن بعد أن حصلنا على تدوين *foo{THING}، لا يتم استخدام typeglobs كثيرًا لمقبض الملف
عمليات التلاعب، على الرغم من أنها لا تزال ضرورية لتمرير مقابض الملفات والدليل الجديدة تمامًا
داخل أو خارج الوظائف. هذا لأن * HANDLE {IO} يعمل فقط إذا كان HANDLE يعمل بالفعل
تم استخدامه كمقبض. بمعنى آخر، يجب استخدام *FH لإنشاء جدول رموز جديد
إدخالات. *foo{THING} لا يمكن. عندما تكون في شك، استخدم *FH.

جميع الوظائف القادرة على إنشاء معالجات الملفات (افتح(), أوبيندير (), يضخ(),
socketpair (), sysopen (), مقبس ()و قبول ()) إنشاء مجهول تلقائيًا
filehandle إذا كان المقبض الذي تم تمريره إليهم هو متغير عددي غير مهيأ. هذا يسمح
التركيبات مثل "open(my $fh,...)" و"open(local $fh,...)" التي سيتم استخدامها لإنشاء
مقابض الملفات التي سيتم إغلاقها بشكل ملائم تلقائيًا عند انتهاء النطاق ، بشرط
لا توجد إشارات أخرى لهم. هذا يلغي إلى حد كبير الحاجة إلى typeglobs
عند فتح معالجات الملفات التي يجب تمريرها، كما في المثال التالي:

شبه مفتوح {
افتح $ fh، "_"
أو يموت "لا يمكن فتح"_ ": $!"؛
إرجاع $fh;
}

{
بلدي $f = myopen("
طباعة <$f>;
# $f مغلق ضمنيًا هنا
}

لاحظ أنه إذا تم استخدام متغير عددي تمت تهيئته بدلاً من ذلك فإن النتيجة ستكون مختلفة: "my
$ fh = 'zzz' ؛ open ($ fh، ...) "يكافئ" open (* {'zzz'}، ...) "." استخدم 'refs' صارمة "
يحظر مثل هذه الممارسة.

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

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


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

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

  • 1
    PSI
    PSI
    Psi هو برنامج XMPP قوي عبر الأنظمة الأساسية
    عميل مصمم للمستخدمين ذوي الخبرة.
    هناك تصميمات متاحة لـ MS
    Windows و GNU / Linux و macOS .. الجمهور:
    المستخدمين النهائيين...
    تحميل Psi
  • 2
    Blobby Volley 2 تحديث
    Blobby Volley 2 تحديث
    استمرار الرسمي الشهير
    لعبة بلوبي فولي 1.x أركيد..
    الجمهور: المستخدمون النهائيون / سطح المكتب. مستخدم
    الواجهة: برنامج OpenGL، SDL. برمجة
    اللغة: C++، لوا. ج...
    تحميل لعبة بلوبي فولي 2
  • 3
    SuiteCRM
    SuiteCRM
    SuiteCRM هو العميل الحائز على جائزة
    إدارة العلاقات (CRM)
    التطبيق الذي قدمه لك المؤلفون
    والمحافظون ، SalesAgility. انها
    أشهر العالم ...
    قم بتنزيل SuiteCRM
  • 4
    بورادمين
    بورادمين
    Poweradmin هو DNS قائم على الويب
    أداة إدارية لخادم PowerDNS.
    الواجهة لديها دعم كامل لمعظم
    من ميزات PowerDNS. إنه ممتلئ
    الدعم...
    تحميل Poweradmin
  • 5
    إطار عمل ويب الجن
    إطار عمل ويب الجن
    Gin هو إطار عمل ويب سريع بشكل لا يصدق
    مكتوب في Golang يمكنه أداء ما يصل إلى
    40 مرة أسرع بفضل
    واجهة برمجة تطبيقات تشبه مارتيني وإصدار مخصص من
    هتتبروت ...
    تحميل إطار عمل جين ويب
  • 6
    سيريوس لينوكس
    سيريوس لينوكس
    CEREUS LINUX مبني على MX LINUX
    العديد من المكاتب. هذا هو
    أحد التطبيقات التي يمكن جلبها أيضًا
    تبدأ من
    https://sourceforge.net/projects/cereu...
    تحميل سيريوس لينكس
  • أكثر "

أوامر لينكس

Ad