سؤال

في بيثون، إذا كنت تفعل هذا:

print "4" * 4

وأحصل

> "4444"

في بيرل، ويهمني الحصول على

> 16

هل هناك طريقة سهلة للقيام السابق في بيرل؟

هل كانت مفيدة؟

المحلول

$ perl -e 'print "4"x4; print "\n"'
4444

ويتم توثيق المشغل x في perldoc perlop . هنا ثنائي يعني عامل أخذ اثنين من الحجج، لا تتكون من البتات، بالمناسبة.

<اقتباس فقرة>   

وثنائي "س" هي المشغل التكرار. في سياق مفردة أو إذا كان   لم يتم وضع المعامل الأيسر بين قوسين، فإنها ترجع سلسلة تتألف   من المعامل الأيسر كرر عدة مرات يحددها الحق   المعامل. في سياق القائمة، إذا يتم وضع المعامل الأيسر بين قوسين   أو هي قائمة التي شكلتها "qw/STRING/"، فإنه يكرر القائمة. إذا كان الحق   المعامل صفرا أو سلبية، فإنها ترجع سلسلة فارغة أو فارغة   قائمة، وهذا يتوقف على السياق.

       print ’-’ x 80;             # Print row of dashes

       print "\t" x ($tab/8), ’ ’ x ($tab%8);      # Tab over

       @ones = (1) x 80;           # A list of 80 1’s
       @ones = (5) x @ones;        # Set all elements to 5

والمقصود perl -e إلى تنفيذ التعليمات البرمجية بيرل من سطر الأوامر:

$ perl --help
Usage: perl [switches] [--] [programfile] [arguments]
  
  -e program     one line of program (several -e's allowed, omit programfile)

نصائح أخرى

في بيرل، وتريد استخدام عامل التشغيل "س".

لاحظ الفرق بين

"4" x 4

و

("4") x 4

وفي السابق تنتج سلسلة متكررة:

"4444"

وهذه الأخيرة قائمة المتكررة:

("4", "4", "4", "4")

وانها مشابهة جدا في بيرل

print "4" x 4;

وFWIW، انها print 4 x 4 أيضا في بيرل.

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

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

وجميع الأجوبة، وقدمت حتى الآن، وغاب بالذكر أن x المشغل لا يعمل ليس فقط على سلسلة حرفية ولكن أيضا على متغيرات السلسلة أو التعبيرات التي تبني سلاسل:

$msg = "hello ";
print $msg x 2;
print ($msg x 2) x 2;

إذا كنت تريد طباعة 10 حرف "A" الصورة، يمكنك أيضا القيام بذلك

perl -e 'print "A" x 10'; echo

وعلى سبيل المثال مع الانتاج

user@linux:~$ perl -e 'print "A" x 10'; echo
AAAAAAAAAA
user@linux:~$ 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top