ความแตกต่างระหว่าง Perl และ PHP [ปิด]


101

ฉันวางแผนที่จะเรียนรู้ Perl 5 และเนื่องจากฉันใช้ PHP เพียงอย่างเดียวจนถึงตอนนี้ฉันจึงอยากรู้ว่าภาษาต่างกันอย่างไร

เมื่อ PHP เริ่มต้นจากชุด "Perl hacks" เห็นได้ชัดว่ามีการโคลนคุณลักษณะบางอย่างของ Perls

  • อะไรคือความแตกต่างหลักในไวยากรณ์? เป็นความจริงหรือไม่ที่ Perl คุณมีทางเลือกและวิธีการแสดงออกมากขึ้น?

  • เหตุใด Perl จึงไม่ใช้กับเว็บไซต์แบบไดนามิกบ่อยนักอีกต่อไป อะไรทำให้ PHP ได้รับความนิยมมากขึ้น?


2
ด้วยความอยากรู้อยากเห็นฉันต้องถาม: ถ้าคุณสามารถเลือกภาษาที่สองของคุณได้อย่างอิสระหลังจาก PHP ทำไม Perl แทนที่จะเป็น Python หรือ Ruby ที่ทันสมัยกว่า?
jholster

37
อะไรคือพื้นฐานที่ทำให้ Python และ Ruby ทันสมัยขึ้น?
Joshua Partogi

2
ฉันไม่คิดว่าผู้คนควรพยายามเปรียบเทียบภาษา มี แต่จะนำไปสู่ความสับสน
Ben Shelock

11
@ เบ็น: การเปรียบเทียบไวยากรณ์มียูทิลิตี้ จำกัด การเปรียบเทียบคุณสมบัติสามารถช่วยในการเรียนรู้ภาษาใหม่ ๆ
ออก

1
ฉันเชื่อว่าทุกภาษามีจุดแข็งตามสิ่งที่นักออกแบบจินตนาการไว้ โดยเฉพาะขึ้นอยู่กับชุดกรณีการใช้งาน ดังนั้นการเปรียบเทียบภาษาจึงมักมีอคติและสับสน
CodeAngel

คำตอบ:


284

Perl และ PHP มีความแตกต่างกันมากกว่า ลองพิจารณา Perl 5 เนื่องจาก Perl 6 ยังอยู่ระหว่างการพัฒนา ความแตกต่างบางอย่างจัดกลุ่มคร่าวๆตามหัวเรื่อง:

  • Perl มีการสนับสนุนนิพจน์ทั่วไปแบบเนทีฟรวมถึงตัวอักษร regexp PHP ใช้ฟังก์ชัน regexp ของ Perl เป็นส่วนขยาย
  • Perl มีตัวดำเนินการอีกไม่กี่ตัวรวมถึงการจับคู่ ( =~, !~), การเหมือนเครื่องหมายคำพูด ( qw, qx& c.), การยกกำลัง ( **), การทำซ้ำสตริง ( x) และช่วง ( ..และ...) PHP มีตัวดำเนินการบางตัวที่ Perl ไม่มีเช่นตัวดำเนินการปราบปรามข้อผิดพลาด ( @) instanceof(แม้ว่า Perl จะมีUniversal::isaวิธีการ) และclone.
  • ใน PHP newเป็นตัวดำเนินการ ใน Perl เป็นชื่อทั่วไปของรูทีนย่อยการสร้างอ็อบเจ็กต์ที่กำหนดไว้ในแพ็กเกจไม่มีอะไรพิเศษเท่าที่เกี่ยวข้องกับภาษา
  • ตัวดำเนินการเชิงตรรกะ Perl ส่งคืนอาร์กิวเมนต์ของพวกเขาในขณะที่พวกเขาส่งคืนบูลีนใน PHP ลอง:

    $foo = '' || 'bar';

    ในแต่ละภาษา ใน Perl คุณสามารถ$foo ||= 'default'ตั้งค่า $ foo เป็นค่าได้หากยังไม่ได้ตั้งค่า วิธีที่สั้นที่สุดใน PHP คือ$foo = isset($foo) ? $foo : 'default';(อัปเดตใน PHP 7.0+ คุณสามารถทำได้$foo = $foo ?? 'default')

  • Perl ชื่อตัวแปรระบุในตัวชนิดที่มีสาม Perl และชนิดระบุเป็นส่วนหนึ่งของชื่อ (เรียกว่า " เครื่องหมาย ") เพื่อให้$fooเป็นตัวแปรที่แตกต่างกว่าหรือ@foo%foo
  • (เกี่ยวข้องกับจุดก่อนหน้า) Perl มีรายการตารางสัญลักษณ์แยกต่างหากสำหรับสเกลาร์อาร์เรย์แฮชโค้ดที่จับไฟล์ / ไดเร็กทอรีและรูปแบบ แต่ละคนมีเนมสเปซของตัวเอง
  • Perl ให้การเข้าถึงตารางสัญลักษณ์แม้ว่าการจัดการจะไม่ได้มีไว้สำหรับคนใจอ่อน ใน PHP การจัดการตารางสัญลักษณ์จะ จำกัด เฉพาะการสร้างการอ้างอิงและextractฟังก์ชัน
  • โปรดทราบว่า "การอ้างอิง" มีความหมายแตกต่างกันใน PHP และ Perl ใน PHP การอ้างอิงคือนามแฝงตารางสัญลักษณ์ ใน Perl การอ้างอิงเป็นตัวชี้ที่ชาญฉลาด
  • Perl มีประเภทที่แตกต่างกันสำหรับคอลเลกชันที่จัดทำดัชนีจำนวนเต็ม (อาร์เรย์) และคอลเล็กชันที่จัดทำดัชนีสตริง (แฮช) ใน PHP พวกเขากำลังประเภทเดียวกัน: เป็นอาเรย์ / แผนที่ได้รับคำสั่ง
  • อาร์เรย์ Perl ไม่กระจัดกระจาย: การตั้งค่าองค์ประกอบที่มีดัชนีใหญ่กว่าขนาดปัจจุบันของอาร์เรย์จะตั้งค่าองค์ประกอบที่แทรกแซงทั้งหมดเป็นundefined(ดูperldata ) อาร์เรย์ PHP เบาบาง การตั้งค่าองค์ประกอบจะไม่ตั้งค่าองค์ประกอบที่แทรกแซง
  • Perl สนับสนุนกัญชาและอาเรย์ชิ้นกำเนิดและชิ้นย่อมโอนให้แก่ซึ่งมีทุกประเภทของการใช้งาน ใน PHP คุณใช้array_sliceเพื่อแยกชิ้นส่วนและarray_spliceกำหนดให้กับชิ้นส่วน
  • คุณสามารถทิ้งอาร์กิวเมนต์ไปยังตัวดำเนินการตัวห้อยใน PHP ได้เพื่อความมหัศจรรย์ ใน Perl คุณไม่สามารถละทิ้งตัวห้อยได้
  • hashes Perl เป็นเรียงลำดับ
  • Perl มีตัวแปรที่กำหนดไว้ล่วงหน้าและเวทย์มนตร์จำนวนมาก ตัวแปรที่กำหนดไว้ล่วงหน้าของ PHP มีวัตถุประสงค์ที่แตกต่างกันมาก
  • Perl มีตัวปรับเปลี่ยนคำสั่ง : คำสั่งควบคุมบางคำสั่งสามารถวางไว้ที่ส่วนท้ายของคำสั่ง
  • Perl รองรับการกำหนดขอบเขตแบบไดนามิกผ่านlocalคำสำคัญ
  • นอกจากนี้ Perl มีทั่วโลกคำศัพท์ (บล็อก) และแพคเกจขอบเขต PHP มีทั่วโลกฟังก์ชั่นวัตถุชั้นเรียนและ namespace ขอบเขต
  • ใน Perl ตัวแปรจะเป็นแบบโกลบอลตามค่าเริ่มต้น ใน PHP ตัวแปรในฟังก์ชันจะเป็นแบบโลคัลโดยค่าเริ่มต้น
  • Perl รองรับการเรียกหางอย่างชัดเจนผ่านgotoฟังก์ชัน
  • Perl ของต้นแบบให้การตรวจสอบชนิดที่ จำกัด มากขึ้นสำหรับอาร์กิวเมนต์ฟังก์ชั่นกว่าของ PHP ประเภทนัย เป็นผลให้ต้นแบบมีประโยชน์ จำกัด มากกว่าการบอกใบ้ประเภท
  • ใน Perl คำสั่งที่ประเมินล่าสุดจะถูกส่งกลับเป็นค่าของรูทีนย่อยถ้าคำสั่งนั้นเป็นนิพจน์ (กล่าวคือมีค่า) แม้ว่าจะไม่ได้ใช้คำสั่ง return หากคำสั่งสุดท้ายไม่ใช่นิพจน์ (เช่นไม่มีค่า) เช่นลูปค่าที่ส่งคืนจะไม่ระบุ (ดูperlsub ) ใน PHP ถ้าไม่มีการกลับมาอย่างชัดเจนที่ค่าตอบแทนเป็นโมฆะ
  • รายการ Perl flattens (ดูperlsub ); สำหรับโครงสร้างข้อมูลที่ไม่แบนให้ใช้การอ้างอิง

    @foo = qw(bar baz);
    @qux = ('qux', @foo, 'quux'); # @qux is an array containing 4 strings
    @bam = ('bug-AWWK!', \@foo, 'fum'); # @bam contains 3 elements: two strings and a array ref
    

    PHP ไม่ทำให้อาร์เรย์แบนราบ

  • Perl มีบล็อกรหัสพิเศษ ( BEGIN, UNITCHECK, CHECK, INITและEND) ที่จะดำเนินการ ซึ่งแตกต่างจาก PHP auto_prepend_fileและauto_append_fileไม่มีการ จำกัด จำนวนบล็อกโค้ดแต่ละประเภท นอกจากนี้บล็อกโค้ดยังถูกกำหนดไว้ภายในสคริปต์ในขณะที่ตัวเลือก PHP ถูกตั้งค่าในเซิร์ฟเวอร์และไฟล์กำหนดค่าต่อไดเร็กทอรี
  • ใน Perl, อัฒภาคแยกงบ ใน PHP จะยุติการใช้งานยกเว้นว่าแท็กปิด PHP ("?>") สามารถยุติคำสั่งได้
  • มูลค่าของการแสดงออกใน Perl เป็นบริบทที่สำคัญ
  • ตัวห้อยเชิงลบใน Perl สัมพันธ์กับส่วนท้ายของอาร์เรย์ $bam[-1]เป็นองค์ประกอบสุดท้ายของอาร์เรย์ ตัวห้อยเชิงลบใน PHP เป็นตัวห้อยเหมือนกับตัวอื่น ๆ
  • ใน Perl 5 คลาสจะขึ้นอยู่กับแพ็กเกจและดูเหมือนคลาสใน PHP (หรือภาษาอื่น ๆ ส่วนใหญ่) คลาส Perl 6 นั้นใกล้เคียงกับคลาส PHP มากขึ้น แต่ก็ยังแตกต่างกันมาก (Perl 6 แตกต่างจาก Perl 5 ในรูปแบบอื่น ๆ แต่ก็ไม่ตรงประเด็น) ความแตกต่างหลายประการระหว่าง Perl 5 และ PHP เกิดจากข้อเท็จจริงที่ว่าคุณสมบัติ OO ส่วนใหญ่ไม่ได้อยู่ในตัว Perl แต่ขึ้นอยู่กับการแฮ็ก ยกตัวอย่างเช่นได้รับการแปลเป็นสิ่งที่ชอบ$obj->method(@args) (ref $obj)::method($obj, @args)รายการที่ไม่ครบถ้วนสมบูรณ์:
    • PHP จัดเตรียมตัวแปรพิเศษ$thisในวิธีการโดยอัตโนมัติ Perl ส่งการอ้างอิงไปยังวัตถุเป็นอาร์กิวเมนต์แรกของวิธีการ
    • Perl ต้องการการอ้างอิงถึงจะได้รับพรในการสร้างวัตถุ การอ้างอิงใด ๆ สามารถได้รับพรเป็นตัวอย่างของชั้นเรียนที่กำหนด
    • ใน Perl คุณสามารถเปลี่ยนการสืบทอดแบบไดนามิกผ่าน@ISAตัวแปรแพ็กเกจ
  • Perl สนับสนุนการดำเนินงานมาก
  • พูดอย่างเคร่งครัด Perl ไม่มีความคิดเห็นแบบหลายบรรทัด แต่ระบบPODสามารถใช้เพื่อให้ได้ผลเช่นเดียวกัน
  • ใน Perl //เป็นตัวดำเนินการ ใน PHP เป็นจุดเริ่มต้นของการแสดงความคิดเห็นหนึ่งบรรทัด
  • จนถึง PHP 5.3 PHP ได้รับการสนับสนุนอย่างมากสำหรับฟังก์ชันนิรนาม ( create_functionฟังก์ชัน) และไม่มีการรองรับการปิด
  • PHP มีอะไรที่เหมือนกับแพคเกจของ Perl จนถึงรุ่น 5.3 ซึ่งแนะนำnamespaces
  • ที่จริงแล้วการสนับสนุนข้อยกเว้นในตัวของ Perl นั้นแทบจะไม่มีอะไรเหมือนกับข้อยกเว้นในภาษาอื่น ๆ มากจนแทบจะดูเหมือนเป็นข้อยกเว้น คุณประเมินบล็อกและตรวจสอบค่าของ$@( evalแทนtry, dieแทนthrow) ข้อผิดพลาด ลอง :: จิ๋วข้อยกเว้นโมดูลสนับสนุนที่คุณพบพวกเขาในภาษาอื่น ๆ (เช่นเดียวกับบางโมดูลอื่น ๆ ที่ระบุไว้ในข้อผิดพลาดของดูเพิ่มเติมส่วน)

PHP ได้รับแรงบันดาลใจจาก Perl ทางเดียวกันผีของพาราไดซ์ได้รับแรงบันดาลใจจากผีของตะวันตกหรือแปลกชงได้รับแรงบันดาลใจจากหมู่บ้าน เป็นการดีที่สุดที่จะนำลักษณะเฉพาะของ PHP ออกจากใจของคุณเมื่อเรียนรู้ Perl มิฉะนั้นคุณจะสะดุด

ตอนนี้สมองฉันเจ็บมากฉันจะหยุด


21
นี่เป็นคำตอบที่ยอดเยี่ยมและฉันรู้สึกไม่ดีที่จะสร้าง nitpick เล็ก ๆ ขึ้นมา แต่ส่วนใหญ่คุณถูกต้องเกี่ยวกับอาร์เรย์ Perl เมื่อคุณมี@array = qw(a b c)และคุณทำ$array[4] = 'e'เนื้อหาของอาร์เรย์จะไม่ตรง('a', 'b', 'c', undef, 'e'); พวกเขากำลัง('a', 'b', 'c', ดำรงอยู่'e') , นั่นคือ[3]สล็อตไม่ถือตัวชี้ไปที่สเกลาร์ซึ่งเป็น undef มันไม่มีอะไรเลย (และตัวexistsดำเนินการจะทดสอบสิ่งนี้) ความแตกต่างเล็กน้อย แต่แตกต่าง :)
hobbs

9
MAN นี่คือหนึ่งในคำตอบที่ดีที่สุดที่ฉันเคยเห็น โดยเฉพาะส่วนที่เกี่ยวกับแรงบันดาลใจ เพียงแค่: เจ๋งและจริง ;)
jm666

2
วิธีที่สั้นที่สุดในการตั้งค่า$fooหากยังไม่ได้ตั้งค่าอาจเป็นisset($foo) || $foo='default';
alexbusu

45

เมื่อ PHP เข้ามาในฉากทุกคนต่างประทับใจกับความแตกต่างหลัก ๆ จาก Perl:

  1. ตัวแปรอินพุตอยู่ในขอบเขตส่วนกลางแล้วไม่มีการแยกวิเคราะห์ที่น่าเบื่อ
  2. การฝัง HTML เพียง<?php ... ?>ใดก็ได้ ไม่มีเทมเพลตที่น่าเบื่อ
  3. ข้อความแสดงข้อผิดพลาดบนหน้าจอ ไม่มีบันทึกข้อผิดพลาดที่น่าเบื่อ
  4. ง่ายต่อการเรียนรู้ อ่านหนังสือไม่น่าเบื่อ

เมื่อเวลาผ่านไปทุกคนก็ได้เรียนรู้ว่าพวกเขาไม่ได้เป็นประโยชน์ฮิฮิ ...


21

ฉันสังเกตเห็นว่าหน้า PHP เทียบกับ Perl ส่วนใหญ่ดูเหมือนจะเป็นไฟล์

PHP ดีกว่า Perl เพราะ <ใส่เหตุผลง่อยที่นี่>

ilk และไม่ค่อยทำการเปรียบเทียบที่สมเหตุสมผล

คุณจะพบว่า PHP มักจะเข้าใจง่ายกว่า Perl โดยเฉพาะเมื่อคุณมีประสบการณ์น้อย ตัวอย่างเช่นการตัดสตริงของช่องว่างที่นำหน้าและต่อท้ายใน PHP นั้นทำได้ง่าย

$string = trim($string);

ใน Perl นั้นค่อนข้างคลุมเครือ

$string =~ s/^\s+//;
$string =~ s/\s+$//;

(ฉันเชื่อว่าสิ่งนี้มีประสิทธิภาพมากกว่าการจับและแทนที่บรรทัดเดียวเล็กน้อยและยังเข้าใจได้มากกว่าเล็กน้อย) อย่างไรก็ตามแม้ว่า PHP มักจะคล้ายภาษาอังกฤษมากกว่า แต่บางครั้งก็ยังแสดงรากของมันเป็นกระดาษห่อหุ้มสำหรับ C ระดับต่ำ ตัวอย่างเช่นstrpbrkและstrspnอาจใช้ไม่บ่อยนักเพราะ PHP dabblers ส่วนใหญ่เขียนฟังก์ชันที่เทียบเท่าของตัวเองสำหรับสิ่งที่ลึกลับเกินไปแทนที่จะใช้เวลาสำรวจคู่มือ ฉันยังสงสัยเกี่ยวกับโปรแกรมเมอร์ที่ภาษาอังกฤษเป็นภาษาที่สองเนื่องจากทุกคนมีความเท่าเทียมกันกับสิ่งต่างๆเช่น Perl ซึ่งต้องเรียนรู้ตั้งแต่เริ่มต้น

ฉันได้กล่าวถึงคู่มือแล้ว PHP มีคู่มือออนไลน์ที่ดีและน่าเสียดายที่จำเป็นต้องใช้ ฉันยังคงอ้างถึงเป็นครั้งคราวสำหรับสิ่งที่ควรเรียบง่ายเช่นลำดับของพารามิเตอร์หรือหลักการตั้งชื่อฟังก์ชัน ด้วย Perl คุณอาจจะพบว่าคุณจะหมายถึงคู่มือการใช้งานจำนวนมากในขณะที่คุณเริ่มต้นแล้ววันหนึ่งคุณจะมีความฮ่าช่วงเวลาและไม่เคยต้องการมันอีกครั้ง อย่างน้อยก็จนกว่าคุณจะก้าวหน้ามากขึ้นและตระหนักว่าไม่เพียง แต่มีมากกว่าหนึ่งวิธีเท่านั้นยังมีวิธีที่ดีกว่ามีคนอื่นทำวิธีที่ดีกว่านี้ไปแล้วและบางทีคุณควรไปที่ CPAN

Perl มีตัวเลือกและวิธีแสดงสิ่งต่างๆมากขึ้น สิ่งนี้ไม่จำเป็นต้องเป็นสิ่งที่ดีแม้ว่าจะช่วยให้โค้ดสามารถอ่านได้มากขึ้นหากใช้อย่างชาญฉลาดและอย่างน้อยก็เป็นหนึ่งในวิธีที่คุณน่าจะคุ้นเคย มีรูปแบบและสำนวนบางอย่างที่คุณจะพบว่าตัวเองตกหลุมรักและฉันขอแนะนำให้อ่านแนวทางปฏิบัติที่ดีที่สุดของ Perl (เร็วกว่าในภายหลัง) พร้อมกับPerl Cookbook ฉบับที่สอง เพื่อเร่งความเร็วในการแก้ปัญหาทั่วไป

ฉันเชื่อว่าเหตุผลที่ Perl ถูกใช้น้อยลงในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกันคือในอดีตการรับรู้ความช้าของ CGI และความไม่เต็มใจที่จะติดตั้งmod_perlของโฮสต์เนื่องจากปัญหาด้านความปลอดภัยและการกำหนดค่าทำให้ PHP เป็นตัวเลือกที่น่าสนใจยิ่งขึ้น จากนั้นวงจรก็ดำเนินต่อไปผู้คนจำนวนมากขึ้นเรียนรู้ที่จะใช้ PHP เนื่องจากโฮสต์จำนวนมากเสนอให้ใช้งานและโฮสต์อื่น ๆ ก็เสนอมันเพราะนั่นคือสิ่งที่ผู้คนต้องการใช้ ความแตกต่างของความเร็วและปัญหาด้านความปลอดภัยถูกแสดงโดยFastCGI ในปัจจุบันและในกรณีส่วนใหญ่ PHP ก็หมด FastCGI เช่นกันแทนที่จะปล่อยให้อยู่ในแกนหลักของเว็บเซิร์ฟเวอร์

ไม่ว่าจะเป็นกรณีนี้หรือมีเหตุผลอื่น ๆ PHP ก็ได้รับความนิยมและมีการเขียนแอพพลิเคชั่นมากมาย สำหรับคนส่วนใหญ่ที่ต้องการเพียงแค่เว็บไซต์ระดับเริ่มต้นที่มีบล็อกหรือแกลเลอรีรูปภาพธรรมดา PHP คือสิ่งที่พวกเขาต้องการนั่นคือสิ่งที่โฮสต์ส่งเสริม ไม่ควรมีอะไรหยุดคุณจากการใช้ Perl (หรือสิ่งอื่นที่คุณเลือก) หากคุณต้องการ

ในระดับองค์กรฉันสงสัยว่าคุณจะพบ PHP มากเกินไปในการผลิต (และโปรดอย่ามองว่าFacebookเป็นตัวอย่างที่ต่อต้านฉันพูดว่าระดับองค์กร )


2
น่ายินดีที่การโฮสต์ FastCGI เป็นเรื่องง่ายขึ้นเรื่อย ๆ ซึ่งให้ประสิทธิภาพที่ดีโดยไม่มีความซับซ้อนของ mod_perl
Quentin

@David Dorward: โอเค ฉันพูดในแง่ประวัติศาสตร์เนื่องจาก FastCGI ยังให้ประสิทธิภาพ / ความปลอดภัยที่ดีกว่า mod_php ฉันจะแก้ไขเพื่อพยายามทำให้ชัดเจนขึ้น
Duncan

3
ตัวอย่างการตัดแต่งของคุณไม่สมเหตุสมผล อะไรที่ดีกว่า 4 ผู้ประกอบการหรือความทรงจำทั้งหมดของพารามิเตอร์ที่ไม่สอดคล้องกันและค่าที่ส่งคืนของทุกฟังก์ชั่นเช่น PHP ereg ereg_replace eregi eregi_replace mb_ereg mb_ereg_replace mb_eregi mb_eregi_replace preg_match preg_match_all preg_replace str_replace str_ireplace strstr stristr strrchr strpos stripos strrpos strripos mb_strpos mb_strrpos
Myforwik

3
ตัวอย่างการตัดแต่ง Perl ของคุณอาจง่ายกว่ามาก:$str =~ s/^\s+|\s+$//g;
Francisco Zarabozo

1
@Myforwik ตัวอย่างการตัดแต่งของฉันมีจุดมุ่งหมายเพื่อแสดงให้เห็นว่า Perl ไม่มีฟังก์ชั่นที่ชัดเจนซึ่งอาจสร้างความสับสนให้กับผู้เริ่มต้น เมื่อคุณเรียนรู้ไวยากรณ์แล้วใช่มันง่ายกว่าการจัดการกับความไม่สอดคล้องกันทั้งหมด - ฉันยังชี้ให้เห็นว่าจำเป็นต้องใช้คู่มืออย่างต่อเนื่อง
Duncan

9

Perl ถูกใช้มากมายสำหรับเว็บไซต์ไม่น้อยกว่า Python และ Ruby เป็นต้น ที่กล่าวว่า PHP ถูกใช้บ่อยกว่าวิธีใด ๆ ฉันคิดว่าปัจจัยที่สำคัญที่สุดคือความง่ายในการปรับใช้ PHP และความสะดวกในการเริ่มต้นใช้งาน

ความแตกต่างของไวยากรณ์มีมากเกินกว่าที่จะสรุปได้ที่นี่ แต่โดยทั่วไปแล้วมันเป็นความจริงที่มีหลายวิธีในการแสดงความเป็นตัวเอง (ซึ่งเรียกว่า TIMTWOTDI มีมากกว่าวิธีเดียวที่จะทำได้)


9

สิ่งที่ฉันชอบเกี่ยวกับ Perl คือวิธีจัดการอาร์เรย์ / รายการ นี่คือตัวอย่างวิธีที่คุณจะสร้างและใช้ฟังก์ชัน Perl (หรือ "รูทีนย่อย") ซึ่งใช้ประโยชน์จากสิ่งนี้สำหรับอาร์กิวเมนต์:

sub multiply
{
    my ($arg1, $arg2) = @_; # @_ is the array of arguments
    return $arg1 * $arg2;
}

ใน PHP คุณสามารถทำสิ่งที่คล้ายกันlist()ได้ แต่ก็ไม่เหมือนกัน ในรายการ Perl และอาร์เรย์จะได้รับการปฏิบัติเหมือนกัน (โดยปกติ) คุณยังสามารถทำสิ่งต่างๆเช่น:

$week_day_name = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")[$week_day_index];

และความแตกต่างอีกอย่างที่คุณต้องรู้คือตัวดำเนินการเปรียบเทียบตัวเลข / สตริง ใน Perl ถ้าคุณใช้<, >, ==, !=, <=>และอื่น ๆ , Perl แปลงตัวถูกดำเนินการทั้งสองหมายเลข หากคุณต้องการแปลงเป็นสตริงแทนคุณต้องใช้งานlt, gt, eq, ne, cmp(เทียบเท่าที่เกี่ยวข้องของผู้ประกอบการที่ระบุไว้ก่อนหน้านี้) ตัวอย่างที่จะทำให้คุณได้รับ:

if ("a" == "b") { ... } # This is true.
if ("a" == 0) { ... } # This is also true, for the same reason.

อาร์เรย์และรายการมักจะถือว่าเหมือนกัน
Brad Gilbert

ใช่จริง ฉันคิดว่าฉันจะพูดแบบนั้น แต่ลืมไป แก้ไขเพื่อสะท้อนให้เห็นว่า
crimson_penguin

4

ฉันไม่ต้องการเพิ่มอะไรในคำตอบที่ยอดเยี่ยมของ outis ฉันต้องการแสดงคำตอบสำหรับคุณเท่านั้น:

เหตุใด Perl จึงไม่ใช้กับเว็บไซต์แบบไดนามิกบ่อยนักอีกต่อไป อะไรทำให้ PHP ได้รับความนิยมมากกว่ามัน?

โปรดตรวจสอบไซต์ "แนวโน้มงาน" ก่อน - และคุณสามารถใช้วิจารณญาณได้โดยลำพัง

อย่างที่คุณเห็น perl ยังคงเป็นผู้นำ - แต่เป็นที่นิยมสำหรับการใช้งานจริงไม่ใช่สำหรับของเล่น :)


1
ฉันคิดว่าการเปรียบเทียบนี้ก็น่าสนใจเช่นกัน: www.simplyhired.com/a/jobtrends/trend/q-Perl,+Python,+PHP,+Ruby,+Java,+C%23,+C
Sorin Postelnicu

1
แก้ไขลิงค์เสียกรุณาใช้: simplyhired.com/…
r4.

SH.com/a/jobtrends ดูเหมือนจะไม่มีอยู่จริง โปรดใช้: simplyhired.com/search?q=Perl%2C%2BPython%2C%2BPHP%2C%2BRuby
r4

@ r4 ลิงก์ของคุณไม่เหมือนกับลิงก์ต้นฉบับ (ตอนนี้ใช้งานไม่ได้) ต้นฉบับแสดงกราฟ (เช่นด้านบน) ไม่ใช่รายการงานบางรายการ ลิงก์รายชื่องานอยู่นอกขอบเขต
jm666
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.