บทช่วยสอน Perl: ตัวแปร, อาร์เรย์, แฮชพร้อมตัวอย่างการเขียนโปรแกรม
Perl คืออะไร?
Perl Perl เป็นภาษาโปรแกรมเชิงไดนามิกระดับสูงสำหรับวัตถุประสงค์ทั่วไป ซึ่งสามารถตีความได้ Perl เป็นคำย่อของ “Practical Extraction and Reporting Language” แม้ว่าจะไม่มีคำย่อสำหรับ Perl ก็ตาม ภาษา Perl ได้รับการแนะนำโดย Larry Wall ในปี 1987 ภาษา Perl ได้รับการออกแบบมาโดยเฉพาะสำหรับการแก้ไขข้อความ แต่ในปัจจุบัน ภาษา Perl ถูกใช้กันอย่างแพร่หลายสำหรับวัตถุประสงค์ต่างๆ เช่น การดูแลระบบ Linux การเขียนโปรแกรมเครือข่าย การพัฒนาเว็บ เป็นต้น
มาพูดง่ายๆ กันดีกว่า แม้ว่าคอมพิวเตอร์จะเข้าใจแค่เลข 0 และ 1 (ภาษาไบนารี่/ภาษาเครื่อง/ [ภาษาระดับต่ำ]) แต่ก็เป็นเรื่องยากมากที่จะเขียนโปรแกรมในภาษาไบนารี่สำหรับมนุษย์อย่างเรา Perl เป็นภาษาโปรแกรมที่ใช้องค์ประกอบภาษาธรรมชาติ คำที่ใช้ในภาษาอังกฤษทั่วไป ดังนั้นมนุษย์จึงเข้าใจได้ง่ายกว่า [ภาษาระดับสูง- ตอนนี้มีปัญหาเกิดขึ้น คอมพิวเตอร์ไม่สามารถเข้าใจภาษาระดับสูงได้ ซึ่งมนุษย์สามารถเข้าใจได้ง่าย เพื่อสิ่งนั้น เราต้องการบางสิ่งที่สามารถแปลภาษาระดับสูงเป็นภาษาระดับต่ำได้ ล่ามมาที่นี่เพื่อช่วยเหลือเรา ล่ามเป็นซอฟต์แวร์ชิ้นหนึ่งที่แปลงโปรแกรมที่เขียนด้วยภาษาระดับสูงเป็นภาษาระดับต่ำเพื่อให้คอมพิวเตอร์เข้าใจและดำเนินการตามคำสั่งที่เขียนในโปรแกรม ดังนั้น Perl จึงเป็น ตีความภาษาโปรแกรม.
Perl ใช้ที่ไหน?
ภาษาสคริปต์ Perl มีประสิทธิภาพในการใช้งานในหลายสาขา การใช้งาน Perl ที่นิยมใช้กันมากที่สุดคือการพัฒนาเว็บ นอกจากนี้ Perl ยังใช้ในการทำงานอัตโนมัติในเว็บเซิร์ฟเวอร์และงานดูแลระบบอื่นๆ อีกด้วย โดยสามารถสร้างอีเมลและทำความสะอาดระบบได้โดยอัตโนมัติ ปัจจุบัน Perl ยังคงใช้เพื่อจุดประสงค์เดิม นั่นคือการดึงข้อมูลและสร้างรายงาน นอกจากนี้ยังสามารถสร้างรายงานเกี่ยวกับการใช้ทรัพยากรและตรวจสอบปัญหาความปลอดภัยในเครือข่ายได้ ด้วยเหตุนี้ Perl จึงกลายเป็นภาษาที่นิยมใช้ในการพัฒนาเว็บ เครือข่าย และชีวสารสนเทศศาสตร์ นอกจากนี้ Perl ยังใช้สำหรับการเขียนโปรแกรม CGI ได้อีกด้วย
Perl ยังใช้สำหรับการสร้างและจัดการรูปภาพได้อีกด้วย นอกเหนือจากการทำงานเครือข่ายผ่านเทลเน็ต FTP เป็นต้น การสร้างอินเทอร์เฟซผู้ใช้แบบกราฟิก อุปกรณ์อิเล็กทรอนิกส์ VLSI และสร้างตัวกรองอีเมลเพื่อลดการส่งสแปม ถือเป็นตัวอย่างการใช้งานบางส่วนของ Perl
Perl ยังเป็นที่รู้จักสำหรับการนำแนวทาง OOP (การเขียนโปรแกรมเชิงวัตถุ) มาใช้ และรองรับการสืบทอดรูปแบบต่างๆ (แบบง่าย แบบหลายแบบ และแบบข้าวหลามตัด) โพลีมอร์ฟิซึม และการห่อหุ้ม Perl มีความยืดหยุ่นเพียงพอที่จะรองรับแนวทางแบบขั้นตอนและแบบ OOP ได้พร้อมกัน Perl ยังมีโมดูลเสริมที่อนุญาตให้คุณเขียนหรือใช้/นำโค้ดที่เขียนใน Python, PHP, PDL, TCL, อ็อกเทฟ, Java, ค, C++, Basic, Ruby และ Lua ในสคริปต์ Perl ของคุณ ซึ่งหมายความว่าคุณสามารถรวม Perl เข้ากับส่วนพิเศษเหล่านี้ได้ การเขียนโปรแกรมภาษา แทนที่จะเขียนโค้ดที่มีอยู่ใหม่
การประยุกต์ใช้ภาษาโปรแกรม Perl
ทำไมต้องใช้เพิร์ล?
เป็นความจริงที่ว่ายังมีภาษาโปรแกรมอื่นๆ ที่สามารถใช้เพื่อทำทุกอย่างที่กล่าวมาข้างต้น แล้วเหตุใดคุณจึงควรใช้ Perl โดยเฉพาะ? Perl นั้นง่ายต่อการเรียนรู้โดยเฉพาะอย่างยิ่งถ้าคุณมีพื้นฐานด้านการเขียนโปรแกรมคอมพิวเตอร์ Perl ได้รับการออกแบบมาให้ง่ายสำหรับมนุษย์ในการเขียนและทำความเข้าใจ แทนที่จะทำให้การประมวลผลด้วยคอมพิวเตอร์เป็นเรื่องง่าย มันใช้การแสดงออกปกติ รูปแบบภาษาที่เป็นธรรมชาตินั้นแตกต่างจากภาษาโปรแกรมอื่นๆ ที่ใช้ไวยากรณ์และไวยากรณ์เฉพาะ ดังนั้น Perl จึงมีความยืดหยุ่นมากและไม่ได้กำหนดวิธีการคิดวิธีแก้ปัญหาหรือปัญหาใดๆ ให้กับคุณโดยเฉพาะ Perl เป็นแบบพกพาอย่างยิ่ง สามารถทำงานได้บนระบบปฏิบัติการใดๆ ก็ได้ที่มีการติดตั้งโปรแกรมแปลภาษา Perl ดังนั้นจึงเป็นอิสระจากแพลตฟอร์ม Linux ทั้งหมด Operaระบบมาพร้อมกับ Perl ดังนั้นคุณจึงสามารถเริ่มเขียนโค้ด Perl ใน Linux ได้ทันที ซึ่งต่างจากสคริปต์ Shell ที่โค้ดจะเปลี่ยนแปลงไปตามรูปแบบการใช้งานของระบบปฏิบัติการ Linux ทำให้พกพาได้น้อยลงเรื่อยๆ งานเฉพาะเล็กๆ น้อยๆ ใน Perl จะกลายเป็นเรื่องง่ายและรวดเร็ว- ตลอดบทช่วยสอน Perl สำหรับผู้เริ่มต้น คุณจะได้เรียนรู้วิธีการเขียนโค้ดโปรแกรมขนาดเล็กและรวดเร็วสำหรับงานเฉพาะต่างๆ ลองยกตัวอย่างง่ายๆ ของโปรแกรม Hello World สุดคลาสสิกซึ่งใช้ในการเริ่มต้นเรียนรู้ภาษาโปรแกรมใดๆ ที่มี UNIX เป็นรากฐาน:
ตัวอย่าง: Perl สวัสดีชาวโลก
#!/usr/bin/perl print "Hello, world!";
Output:
สวัสดีชาวโลก!
โค้ดสองบรรทัดด้านบนจะพิมพ์ Hello, world! ตอนนี้มันไม่ง่ายและรวดเร็วเกินไปเหรอ? นักเรียนที่มีความรู้เกี่ยวกับ C, C++ จะรู้ว่าต้องใช้โค้ดหลายบรรทัดเพื่อให้ได้ผลลัพธ์เดียวกันในภาษาเหล่านั้น
คุณอาจสงสัยว่าทำไม Perl มีชื่อเสียงมากบนเว็บ- เป็นเรื่องง่ายเนื่องจากสิ่งต่างๆ ที่เกิดขึ้นบนเว็บส่วนใหญ่เป็นข้อความ และ Perl ก็เก่งในการประมวลผลข้อความ หากเราเปรียบเทียบ Perl กับภาษาใดๆ Perl จะเป็นภาษาที่ดีที่สุดซึ่งดีในการจัดการไฟล์ การประมวลผลข้อความ และการรายงานผลลัพธ์
ข้อดีอย่างหนึ่งของ Perl ก็คือว่าเป็นเช่นนั้น อิสระที่จะใช้
ชุมชน Perl เชื่อมั่นอย่างยิ่งว่าซอฟต์แวร์ควรสามารถใช้งานได้ฟรี แก้ไขได้อย่างอิสระ และแจกจ่ายได้อย่างอิสระ อาสาสมัครหลายคนจากชุมชน Perl มุ่งมั่นที่จะทำให้ภาษาการเขียนโปรแกรมดีที่สุดเท่าที่จะเป็นไปได้
ข้อดีและข้อเสียของภาษา Perl
จุดเด่น: | จุดด้อย: |
---|---|
|
|
|
|
มาเริ่มกันเลย
เมื่อมีความรู้เพียงพอเกี่ยวกับประวัติศาสตร์ของ Perl และแนวคิดพื้นฐานของการเขียนโปรแกรมคอมพิวเตอร์ที่จำเป็นสำหรับการเขียนโค้ดใน Perl แล้ว ถึงเวลาแล้วที่เราจะลงลึกและเริ่มต้นกับ Perl บทต่อไปจะสอนคุณว่าคุณสามารถตั้งค่า Perl ในระบบของคุณได้อย่างไรและเตรียมพร้อมสำหรับการเดินทางในการเขียนโค้ดใน Perl บทช่วยสอนการเขียนสคริปต์ Perl นี้จะยึด Linux เป็นระบบปฏิบัติการที่นักเรียนจะใช้สำหรับการเขียนโค้ดใน Perl
ดาวน์โหลดและติดตั้ง Perl – Windows, แมคและลินุกซ์
จะรับเพิร์ลได้อย่างไร?
ข่าวดี คุณน่าจะมีมัน!
แต่ถ้าคุณไม่พบมันในระบบของคุณ คุณยังสามารถรับมันได้ฟรี
หากต้องการทราบว่าคุณได้ติดตั้ง Perl ไว้แล้วหรือไม่ ให้ไปที่บรรทัดคำสั่งแล้วพิมพ์: perl -v
คำสั่งจะแสดงเวอร์ชันของ Perl หากติดตั้งไว้ ในกรณีนี้ เวอร์ชันคือ v5.14.2 แต่ถ้าไม่…ก็อย่าตกใจ…
ยูนิกซ์ |
ติดตั้งแล้ว มาพร้อมกับ Perl ที่ติดตั้งไว้ล่วงหน้า แต่คุณอาจต้องอัปเดตเป็นเวอร์ชันล่าสุด |
Mac OS |
ติดตั้งแล้ว OSX มาพร้อมกับ Perl ที่ติดตั้งไว้ล่วงหน้า แม้ว่าคุณอาจต้องอัปเดตเป็นเวอร์ชันล่าสุดก็ตาม |
Windows |
จำเป็นต้องติดตั้ง มีสองตัวเลือกให้เลือก
|
การอัพเดต Perl บน Linux:
หากคุณต้องการอัปเดตเวอร์ชัน Perl เพียงป้อนคำสั่งบรรทัดเดียว
sudo apt-get ติดตั้ง Perl
และผ่อนคลาย ที่เหลือจะจัดการให้ เพียงตรวจสอบให้แน่ใจว่าคุณมีการเชื่อมต่ออินเทอร์เน็ตที่ใช้งานได้
ติดตั้ง Perl สำหรับ Windows:
ขั้นแรก ให้ดาวน์โหลด Active Perl จากสิ่งนี้ ลิงค์- ทำตามขั้นตอนเหล่านี้เพื่อติดตั้ง ActivePerl Windows ระบบ. ดูภาพหน้าจอด้านล่างสำหรับสิ่งเดียวกัน
ขั้นตอนที่ 1: เมื่อคุณดาวน์โหลดตัวติดตั้งและเริ่มการติดตั้ง คุณจะเห็นหน้าต่างด้านล่าง คลิกถัดไปเพื่อดำเนินการต่อ
ขั้นตอนที่ 2: ยอมรับข้อตกลงใบอนุญาตเพื่อดำเนินการติดตั้งต่อไป
ขั้นตอนที่ 3: ด้านล่างนี้เป็นแพ็คเกจต่างๆ ที่จะติดตั้ง ตามค่าเริ่มต้น ทั้งหมดจะถูกเลือก สิ่งเดียวที่แตกต่างคือ PPM (Perl Package Manager) นี่คือยูทิลิตี้ที่ Active Perl มอบให้เพื่อติดตั้งโมดูลหรือไลบรารี Perl ภายนอกในระบบของคุณ คลิกที่ถัดไปเพื่อดำเนินการต่อ
ขั้นตอนที่ 4: ส่วนขยาย Perl ประเภทต่างๆ ที่สามารถใช้กับ Perl ได้ ส่วนใหญ่เราจะใช้ .Pl, .Plx และ .Pm สำหรับ Perl โดยทั่วไปโมดูล Perl จะใช้ .Pm เป็นนามสกุลไฟล์เพื่ออ้างถึงไฟล์ไลบรารี เลือกตัวเลือกทั้งหมดแล้วคลิกปุ่มถัดไป
ขั้นตอนที่ 5: คลิกที่ปุ่มติดตั้งเพื่อดำเนินการติดตั้งต่อ
ขั้นตอนที่ 6: เมื่อติดตั้งแล้ว ให้รันคำสั่ง 'Perl –v' เพื่อตรวจสอบว่า Perl ได้รับการติดตั้งในระบบของคุณสำเร็จหรือไม่
มีหลายสิ่งที่ต้องหารือเกี่ยวกับการตั้งค่าสภาพแวดล้อม Perl ทั้งใน Linux และ Windowsเนื่องจากจะไม่มีไฟล์ไลบรารีจำนวนมากรวมอยู่ในการติดตั้งนี้ คุณต้องติดตั้งสิ่งเหล่านั้นด้วยตนเอง คุณสามารถติดตั้งด้วยตนเองได้โดยใช้ CPAN (Comprehensive Perl Archiและเครือข่าย) หรือ PPM ซึ่งใช้งานได้กับ Windows Perl เท่านั้น แต่ไฟล์เหล่านี้ไม่จำเป็นสำหรับการเริ่มต้นเขียนโค้ดใน Perl
นอกเหนือจากการตั้งค่าหน้าต่างนี้ คุณยังสามารถใช้ Windows ฟีเจอร์ใหม่ของ Linux subsystem 10 บน Windows และใช้สำหรับการรันโค้ด Perl
โปรแกรม Perl แรก
Hello world!
ตัวอย่าง Perl: สวัสดีชาวโลก
#!/usr/bin/perl -w #this is just a comment… print "Hello World";
ไม่ต้องกังวลหากคุณไม่เข้าใจข้อความนี้ ทุกอย่างจะชัดเจนในไม่ช้า มาดูกันทางไลน์:
#!/usr/bin/perl
นี้บอก Operaระบบเพื่อรันไฟล์นี้ด้วยโปรแกรมที่อยู่ที่ /usr/bin/perl IDE บางตัวไม่จำเป็นต้องใช้บรรทัดนี้ หากจำเป็น คุณต้องเขียนเส้นทางไปหาล่ามของคุณที่นี่ จดจำ! บรรทัดพิเศษนี้จะต้องอยู่ที่จุดเริ่มต้นของโปรแกรมของคุณและต้องเริ่มจาก #! ใช้คำเตือน นี่เป็นคำสั่งพิเศษอีกคำสั่งหนึ่งที่บอกให้ล่ามแสดงคำเตือนใดๆ เช่น -w ซึ่งจะเปิดใช้งานคำเตือนทั่วโลก
print "Hello World";
คำแนะนำการพิมพ์จะเขียนข้อความลงบนหน้าจอ เครื่องหมายอัฒภาคที่ท้ายบรรทัดจะบอกล่าม Perl ว่าคำสั่งเสร็จสิ้นแล้ว คุณต้องใส่เครื่องหมายอัฒภาคที่ส่วนท้ายของทุกคำสั่งในโค้ด Perl หมายเหตุเครื่องหมายคำพูด(“) จำเป็นสำหรับการสอนการพิมพ์ บันทึกสคริปต์ด้านบนเป็น firstprog.pl
On Windows
หากคุณติดตั้ง Strawberry ไว้ คุณสามารถคลิกที่ Run คุณยังสามารถเรียกใช้อินเทอร์เฟซบรรทัดคำสั่งและเขียนบนคอนโซลได้:
C:\> perl path\firstprog.pl
หรือถ้า perl.exe ไม่ได้อยู่ในเส้นทางของคุณ:
C:\> c:\perl\bin\perl.exe firstprog.pl
บนลินุกซ์/ยูนิกซ์
คุณเพียงแค่ต้องเปิด Terminal แล้วเขียน:
perl firstprog.pl
หากคุณไม่สามารถรันโปรแกรมได้ ตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์ในการรันโปรแกรมนั้น พิมพ์ในเทอร์มินัล:
chmod +x firstprog.pl
ขณะนี้โปรแกรมของคุณสามารถปฏิบัติการได้และพร้อมที่จะรันแล้ว หากต้องการดำเนินการ ให้เขียน:
./firstprog
ติดตั้งโมดูล cpan ลบ
โมดูลคือชุดของรหัสที่ใช้เพื่อดำเนินการงานต่างๆ ที่เกี่ยวข้องกับการดำเนินการทั่วไปในโปรแกรมหลายๆ โปรแกรม หากคุณใช้โมดูล Perl คุณไม่จำเป็นต้องเขียนรหัสใหม่เพื่อดำเนินการเดียวกันนี้ Perl สามารถใช้ไลบรารีของรหัสภายนอกดังกล่าวได้ ไลบรารีที่ดีที่สุดตัวหนึ่งคือ CPAN ซึ่งย่อมาจาก Comprehensive Perl Archiเครือข่ายนี้มีโมดูล Perl จำนวนมากให้คุณใช้ เป็นชุมชนหรือเครือข่ายของนักพัฒนาจำนวนมากที่สนับสนุนโมดูลดังกล่าว โดยการติดตั้งการสนับสนุนสำหรับโมดูล CPAN ในโมดูล Perl ของคุณ คุณสามารถใช้โมดูล CPAN และทำให้การทำงานของคุณง่ายขึ้น โมดูล Perl ส่วนใหญ่เขียนด้วย Perl บางส่วนใช้ XS (เขียนด้วย C) ดังนั้นจึงต้องใช้คอมไพเลอร์ C (การตั้งค่านี้ทำได้ง่าย - อย่าเพิ่งตกใจ โมดูลอาจมีการพึ่งพาโมดูลอื่น (เกือบทั้งหมดบน CPAN) และไม่สามารถติดตั้งได้หากไม่มีโมดูลอื่น (หรือไม่มีเวอร์ชันเฉพาะของโมดูลเหล่านั้น) ควรอ่านเอกสารประกอบสำหรับตัวเลือกด้านล่างอย่างละเอียด โมดูลจำนวนมากบน CPAN ในปัจจุบันต้องการ Perl เวอร์ชันล่าสุด (เวอร์ชัน 5.8 ขึ้นไป) ติดตั้ง cpanminus สคริปต์เพื่อรับ แตก สร้าง และติดตั้งโมดูลจาก CPAN เพื่อให้ติดตั้งโมดูลอื่นได้ง่ายขึ้น (คุณจะขอบคุณเราในภายหลัง) การติดตั้ง แอป cpanminus โมดูล Perl ในประเภทบรรทัดคำสั่ง:
cpan App::cpanminus
cpan App::cpanminus ตรวจสอบให้แน่ใจว่าคุณมีการเชื่อมต่ออินเทอร์เน็ตในขณะที่กำลังดาวน์โหลดและติดตั้งโมดูล Perl
ตอนนี้ติดตั้งโมดูลใด ๆ :
cpan –i <Module_Name>.
มาดูตัวอย่างการติดตั้งโมดูล File::Data(เป็น Interface สำหรับเข้าถึง File Data)
ตัวแปรเพิร์ล
ตอนนี้เราจะพูดถึงตัวแปร คุณสามารถจินตนาการถึงตัวแปรเช่นคอนเทนเนอร์ประเภทหนึ่งที่เก็บค่าตั้งแต่หนึ่งค่าขึ้นไป เมื่อกำหนดแล้ว ชื่อของตัวแปรจะยังคงเหมือนเดิม แต่ค่าหรือค่าเปลี่ยนแปลงซ้ำแล้วซ้ำอีก
ตัวแปรมี 3 ประเภท:
ประเภทของตัวแปรในภาษา Perl
สิ่งที่ง่ายที่สุดคือสเกลาร์ และนี่คือหัวข้อของเราวันนี้
ตัวแปรสเกลาร์
ตัวแปรประเภทนี้มีค่าเดียว
ชื่อของมันขึ้นต้นด้วยเครื่องหมายดอลลาร์และตัวระบุ Perl (เป็นชื่อของตัวแปรของเรา)
ตัวแปรสเกลาร์ในภาษา Perl
อนุสัญญาการตั้งชื่อ
หากคุณคุ้นเคยกับภาษาการเขียนโปรแกรมอื่นๆ คุณจะรู้ว่ามีกฎบางประการเกี่ยวกับการตั้งชื่อตัวแปร ในทำนองเดียวกัน Perl มีกฎสามข้อในการตั้งชื่อสเกลาร์
- ชื่อสเกลาร์ทั้งหมดจะขึ้นต้นด้วย $ เป็นเรื่องง่ายที่จะจำนำหน้าทุกชื่อด้วย $ คิดว่ามันเป็น $สเกลาร์
- เช่นเดียวกับ PHP หลังจากอักขระตัวแรก $ ซึ่งเป็นอักขระพิเศษในภาษา Perl อนุญาตให้ใช้อักขระตัวอักษรและตัวเลข เช่น a ถึง z, A ถึง Z และ 0 ถึง 9 อนุญาตให้ใช้อักขระขีดล่างด้วย ใช้ขีดล่างเพื่อแยกชื่อตัวแปรออกเป็นสองคำ 'แต่อักขระตัวแรกไม่สามารถเป็นตัวเลขได้'
- แม้ว่าตัวเลขจะเป็นส่วนหนึ่งของชื่อได้ แต่ตัวเลขไม่สามารถอยู่หลัง $ ทันที นั่นหมายความว่าตัวอักษรตัวแรกหลัง $ จะเป็นตัวอักษรหรือเครื่องหมายขีดล่าง ซึ่งมาจากภาษา C/C++ พื้นหลังควรจะสามารถรับรู้ถึงความคล้ายคลึงได้ทันที ตัวอย่าง
ตัวอย่างภาษาเพิร์ล:
$var; $Var32; $vaRRR43; $name_underscore_23;
อย่างไรก็ตาม สิ่งเหล่านี้ไม่ใช่ชื่อตัวแปรสเกลาร์ทางกฎหมาย
mohohoh # $ character is missing $ # must be at least one letter $47x # second character must be a letter $variable! # you can't have a ! in a variable name
กฎทั่วไปกล่าวว่า เมื่อ Perl มีเพียงสิ่งใดสิ่งหนึ่ง นั่นคือสเกลาร์ สเกลาร์สามารถอ่านได้จากอุปกรณ์ และเราสามารถนำไปใช้กับโปรแกรมของเราได้
ประเภทข้อมูลสเกลาร์สองประเภท
- Numbers
- Strings
Numbers:
ในข้อมูลสเกลาร์ประเภทนี้ เราสามารถระบุได้:
- จำนวนเต็ม เป็นตัวเลขจำนวนเต็ม เช่น 2, 0, 534
- ตัวเลขจุดลอยตัว เป็นตัวเลขจริง เช่น 3.14, 6.74, 0.333
หมายเหตุ: โดยทั่วไปแล้วโปรแกรม Perl Interpreter จะมองเห็นตัวเลขจำนวนเต็มเหมือนกับตัวเลขทศนิยมลอยตัว ตัวอย่างเช่น หากคุณเขียน 2 ลงในโปรแกรม Perl ก็จะมองเห็นเป็น 2.0000
ตัวอักษรจำนวนเต็ม:
ประกอบด้วยตัวเลขตั้งแต่หนึ่งหลักขึ้นไป โดยอาจนำหน้าด้วยเครื่องหมายบวกหรือลบและมีเครื่องหมายขีดล่าง
ตัวอย่างภาษาเพิร์ล:
0; -2542; 4865415484645 #this also can be written with underscores (for clarity) : 4_865_415_484_645
อย่างที่คุณเห็น มันไม่มีอะไรพิเศษ แต่เชื่อผมเถอะ นี่คือสเกลาร์ประเภทที่พบบ่อยที่สุด พวกเขาอยู่ทุกหนทุกแห่ง
ตัวอักษรจุดลอยตัว:
ประกอบด้วยตัวเลข สามารถเลือกลบ จุดทศนิยม และเลขชี้กำลังได้
ตัวอย่างภาษาเพิร์ล:
3.14; 255.000; 3.6e20; # it's 3.6 times 10 to the 20th -3.6e20; # same as above, but negative -3.6e-20; #it's negative 3.6 times 10 to the -20th -3.6E-20; #we also can use E – this means the same the lowercase version -3.6e-20
การแสดงเลขฐานแปด เลขฐานสิบหก และไบนารี่:
มันเป็นทางเลือกแทนระบบทศนิยม ให้ฉันแสดงให้คุณเห็นการแทนค่าเลขฐานแปด เลขฐานสิบหก และไบนารี่ ตารางสั้นๆ นำเสนอข้อมูลสำคัญทั้งหมดเกี่ยวกับสไตล์แปลกๆ นี้:
การเป็นตัวแทน | ฐาน | ดำเนินเรื่องโดย |
---|---|---|
Octal | 8 | 0 (ศูนย์) |
เลขฐานสิบหก | 16 | 0x |
เลขฐานสอง | 2 | 0b |
ตัวอย่างภาษาเพิร์ล:
255; # 255 in decimal notation 0377; # 255 in octal notation 0xff; # 255 in hexadecimal notation 0b11111111; # 255 in binary notation
ค่าทั้งหมดนี้สำหรับ Perl มีความหมายเหมือนกัน Perl จะไม่เก็บค่าในรูปแบบเดียวกัน มันจะแปลงค่าเลขฐานสิบหก ไบนารี ฐานแปดให้เป็นค่าทศนิยมภายใน
การกำหนดค่าเป็นการดำเนินการที่พบได้บ่อยที่สุดสำหรับสเกลาร์ และเป็นเรื่องง่ายมาก Perl จะใช้เครื่องหมายเท่ากับ โดยจะรับค่าของนิพจน์จากด้านขวาแล้วใส่ค่านี้ลงในตัวแปรของเรา
ลองมาดูตัวอย่าง:
$size=15; # give $size value of 15 $y = -7.78; # give $y value of -7.78
ยิ่งไปกว่านั้น คุณสามารถใส่ตัวแปรได้ไม่เพียงแค่ตัวเลขเท่านั้น แต่ยังรวมถึงนิพจน์ด้วย
$z = 6 + 12 # give $z value of 18
Strings
สตริง: มันเป็นสเกลาร์ประเภทง่ายๆ เช่นกัน
ความยาวสูงสุดของสตริงใน Perl ขึ้นอยู่กับจำนวนหน่วยความจำที่คอมพิวเตอร์มี ไม่มีการจำกัดขนาดของสตริง จำนวนอักขระ สัญลักษณ์ หรือคำใดๆ ที่สามารถสร้างสตริงของคุณได้ สตริงที่สั้นที่สุดไม่มีอักขระ ที่ยาวที่สุดสามารถเติมเต็มหน่วยความจำระบบทั้งหมดได้ โปรแกรม Perl สามารถเขียนได้ทั้งหมดโดยใช้ชุดอักขระ ASCII 7 บิต Perl ยังอนุญาตให้คุณเพิ่มชุดอักขระ 8 บิตหรือ 16 บิตหรือที่เรียกว่า อักขระที่ไม่ใช่ ASCII ภายในตัวอักษรสตริง Perl ได้เพิ่มการรองรับ Unicode UTF-8 ด้วย
เช่นเดียวกับตัวเลข มีสตริงสองประเภทที่แตกต่างกัน:
- ตัวอักษรสตริงเครื่องหมายคำพูดเดี่ยว
- Double เครื่องหมายคำพูดตัวอักษรสตริง
ตัวอักษรสตริงที่มีเครื่องหมายคำพูดเดี่ยว
เครื่องหมายคำพูดเดี่ยวใช้เพื่อล้อมรอบข้อมูลที่คุณต้องการให้อ่านตามตัวอักษร ตัวอย่างสั้นๆ และทุกอย่างชัดเจน:
ตัวอย่างภาษาเพิร์ล:
#!/usr/bin/perl $num = 7; $txt = 'it is $num'; print $txt;
Output:
มันคือ $num
ที่นี่เนื่องจากไม่ได้นำค่าเครื่องหมายคำพูดเดี่ยว $num และอักขระตัวอักษร '$', 'n', 'u' & 'm' จะถูกเพิ่มเข้ากับค่าของ $txt
Double-ตัวอักษรสตริงที่ยกมา
Double เครื่องหมายคำพูดใช้เพื่อใส่ข้อมูลที่ต้องการแทรกก่อนประมวลผล ซึ่งหมายความว่าอักขระ escape และตัวแปรจะไม่ถูกแทรกเข้าไปในการดำเนินการในภายหลังโดยตรง แต่จะถูกประเมินทันที อักขระ escape สามารถใช้เพื่อแทรกบรรทัดใหม่ แท็บ ฯลฯ
ตัวอย่างภาษาเพิร์ล:
$num = 7; $txt = "it is $num"; print $txt;
Output:
มันคือ 7
ที่นี่เนื่องจากเครื่องหมายคำพูดคู่ ค่าของ $num จะถูกเพิ่มเข้าไปในค่าของ $txt
Double-quotes แทรกค่าตัวแปรสเกลาร์และอาร์เรย์ แต่ไม่รวมแฮช ในทางกลับกัน คุณสามารถใช้เครื่องหมายคำพูดคู่เพื่อแทรกค่าสไลซ์ของทั้งอาร์เรย์และแฮชได้
ลึกลับ \n
พิจารณาโปรแกรมต่อไปนี้
ตัวอย่างภาษาเพิร์ล:
print "hello \n";
Output:
สวัสดี
Perl ไม่ได้แสดงเพียง 'hello\n' แต่จะแสดงเพียง 'hello' เท่านั้น ทำไม เนื่องจาก '\n' เป็นเครื่องหมายพิเศษ และหมายความว่าคุณต้องการขึ้นบรรทัดใหม่ขณะแสดงข้อความในโปรแกรมของคุณ พิมพ์ “สวัสดี\n บรรทัดใหม่”; คำถามต่อไป- มีสัญญาณพิเศษอะไรอีกไหม? ใช่ พวกเขาเป็น! แต่ไม่ต้องกังวล เพียงไม่กี่อย่างเท่านั้น ตรวจสอบตารางด้านล่าง
สร้าง | Descriptไอออน |
---|---|
\n | ขึ้นบรรทัดใหม่ |
\r | กลับ |
\t | แถบ |
\f | ฟีดรูปแบบ |
\b | Backspace |
\a | ระฆัง |
\e | หลบหนี |
\ 007 | ค่า ASCII ฐานแปดใดๆ (ในที่นี้ 007 = กระดิ่ง) |
\x7f | ค่าฐานสิบหกใด ๆ (ในที่นี้คือ 7f = ลบ) |
\\ | แบ็กสแลช |
- | คำพูดคู่ |
\l | ตัวพิมพ์เล็กถัดไป |
\L | ใช้อักษรตัวพิมพ์เล็กทั้งหมดต่อจากนี้จนถึง \E |
\u | ตัวพิมพ์ใหญ่ถัดไป |
\U | พิมพ์ตัวพิมพ์ใหญ่ทั้งหมดตามตัวอักษรจนถึง \E |
\E | ยุติ \L, \U |
ฉันรู้ว่ามี 'เพียงไม่กี่อย่าง' เท่านั้น… แต่เชื่อฉันเถอะ คุณต้องรู้เท่านั้น
ตัวแปรสตริง
เป็นการดำเนินการแบบเดียวกันกับที่เราเห็นในการกำหนดตัวเลข Perl จะรับสตริงจากด้านขวาของเครื่องหมายเท่ากับและใส่สตริงนี้ลงในตัวแปร
ตัวอย่างภาษาเพิร์ล:
$string = 'tutorial'; # give $string the eight-character string 'tutorial' print $string; $string = $size + 3 ; # give $string the current value of $size plus 3 print $string; $string = $ string * 5; # multiplied $string by 5 print $string;
Output:
กวดวิชา 315
อย่างที่คุณเห็น คุณสามารถใส่ตัวเลขและสตริงในตัวแปรเดียวกันได้ ไม่มีคลาสของตัวแปร
การต่อสตริง (จุด) :
ตัวดำเนินการเรียงต่อกัน “.” จะรวมสตริงสองสตริงขึ้นไป จำไว้ว่า หากสตริงมีเครื่องหมายคำพูด การส่งคืนรถ เครื่องหมายแบ็กสแลช อักขระพิเศษทั้งหมดเหล่านี้ต้องได้รับการ escape ด้วยแบ็กสแลช
Perl ' ' ตัวแปรตัวอย่าง:
#!/usr/bin/perl $a = "Tom is"; $b = "favorite cat"; $c = $a ." mother's ". $b; print $c;
Output:
ทอมเป็นแมวตัวโปรดของแม่
สตริง
“$a”, “$b” จะถูกเรียงต่อกันและเก็บไว้ใน “$c” โดยใช้ตัวดำเนินการ “.”
ในท้ายที่สุด ...
การแปลงระหว่าง Numbers และสตริง:
อย่างที่ทราบกันดีว่า Perl จะแปลงตัวเลขเป็นสตริงโดยอัตโนมัติตามความจำเป็น แล้ว Perl จะรู้ได้อย่างไรว่าเราต้องการอะไรในตอนนี้ เรื่องนี้ง่ายมาก ทุกอย่างขึ้นอยู่กับตัวดำเนินการ (เราจะพูดถึงตัวดำเนินการในภายหลัง แต่ยอมรับว่าตัวดำเนินการมีมากมาย โดยตัวเลขและสตริงจะแตกต่างกัน) หากตัวดำเนินการคาดหวังตัวเลข Perl จะใช้ค่าเป็นตัวเลข หากตัวดำเนินการคาดหวังสตริง Perl จะใช้ค่าเป็นสตริง กล่าวอีกนัยหนึ่ง คุณไม่จำเป็นต้องกังวลเกี่ยวกับการแปลงประเภทนี้ ตัวอย่างสั้นๆ และทุกอย่างควรจะชัดเจน:
ตัวอย่างภาษาเพิร์ล:
$string = "43"; $number = 28; $result = $string + $number; print $result;
Output:
71
ค่าของ $string จะถูกแปลงเป็นจำนวนเต็มและเพิ่มเข้าไปในค่าของ $number
ผลลัพธ์ของการบวก 71 ถูกกำหนดให้กับ $result
ขอบเขตของตัวแปร – ตัวแก้ไขการเข้าถึง
เราสามารถประกาศสเกลาร์ได้ทุกที่ในโปรแกรม แต่คุณต้องระบุตัวแก้ไขการเข้าถึง
ตัวแก้ไขมี 3 ประเภท
- my
- ในประเทศ
- ของเรา
ฉัน: การใช้สิ่งนี้ทำให้คุณสามารถประกาศตัวแปรใดๆ ที่เฉพาะเจาะจงภายในบล็อกได้ คืออยู่ในวงเล็บปีกกา
#!/usr/bin/perl my $var=5; if(1) { my $var_2 =$var; } print $var_2;
ไม่มีเอาท์พุท
ผลลัพธ์ของโปรแกรมจะไม่มีอะไร!
ในตัวอย่างข้างต้น คุณจะเห็นว่ามีสองตัวแปรที่ประกาศ ตัวแปรหนึ่งอยู่ภายใน if block ($var_2) และอีกตัวแปรหนึ่งอยู่นอกบล็อก If ($var) ตัวแปรที่ถูกประกาศไว้ภายนอกบล็อกจะสามารถเข้าถึงได้โดย if block แต่ตัวแปรที่ถูกประกาศไว้ภายในถ้า block จะไม่สามารถเข้าถึงได้โดยโปรแกรมภายนอก
Local: การใช้สิ่งนี้ทำให้เราสามารถปกปิดค่าตัวแปรเดียวกันให้เป็นค่าที่แตกต่างกันได้โดยไม่ต้องเปลี่ยนค่าเดิมของตัวแปร สมมติว่าเรามีตัวแปร $a ซึ่งกำหนดค่าไว้ 5 คุณสามารถเปลี่ยนค่าของตัวแปรนั้นได้จริงโดย ประกาศตัวแปรเดิมใหม่โดยใช้คีย์เวิร์ดท้องถิ่นโดยไม่ต้องเปลี่ยนค่าเดิมของตัวแปรซึ่งก็คือ 5 มาดูกันว่าวิธีนี้ทำงานอย่างไรพร้อมตัวอย่าง
#!/usr/bin/perl $var = 5; { local $var = 3; print "local,\$var = $var \n"; } print "global,\$var = $var \n";
ผลลัพธ์ของโปรแกรมข้างต้นจะเป็นเช่นนี้
ท้องถิ่น $var = 3
ทั่วโลก $var = 5
วิธีนี้ทำให้เราสามารถเปลี่ยนค่าของตัวแปรได้โดยไม่กระทบต่อค่าเดิม
ของเรา: เมื่อตัวแปรถูกประกาศด้วยตัวแก้ไขการเข้าถึง “ของเรา” ตัวแปรนั้นจะสามารถใช้ได้ทั่วทั้งแพ็คเกจ สมมติว่าคุณมีโมดูล Perl หรือแพ็คเกจ test.pm ซึ่งมีการประกาศตัวแปรด้วยขอบเขตของเรา ตัวแปรนี้สามารถเข้าถึงได้ในสคริปต์ใดๆ ก็ตามที่จะใช้แพ็คเกจนั้น
หากคุณจริงจังกับการเขียนโปรแกรมในภาษา Perl คุณควรเริ่มต้นโปรแกรมด้วย
#!/usr/local/bin/perl
ใช้อย่างเข้มงวด
สิ่งนี้จะช่วยให้คุณเขียนโค้ดได้ดีขึ้นและสะอาดยิ่งขึ้น 'use strict' เปิดใช้งาน pragma ที่เข้มงวดซึ่งจะทำให้คุณประกาศตัวแปรของคุณด้วยคำหลักของฉัน
นี่เป็นการฝึกเขียนโปรแกรมที่ดี
#!/usr/local/bin/perl use strict; $var = 10; print "$var";
ผลลัพธ์: ข้อผิดพลาด
#!/usr/local/bin/perl use strict; my $var = 10; print "$var";
Output:
10
อาร์เรย์เพิร์ล
Perl Array คืออะไร?
อาร์เรย์เป็นตัวแปรชนิดพิเศษที่จัดเก็บข้อมูลในรูปแบบรายการ โดยสามารถเข้าถึงแต่ละองค์ประกอบได้โดยใช้หมายเลขดัชนีซึ่งจะไม่ซ้ำกันสำหรับแต่ละองค์ประกอบ คุณสามารถจัดเก็บตัวเลข สตริง ค่าลอยตัว ฯลฯ ในอาร์เรย์ของคุณได้ ซึ่งดูดีมาก แล้วเราจะสร้างอาร์เรย์ใน Perl ได้อย่างไร ใน Perl คุณสามารถกำหนดอาร์เรย์โดยใช้เครื่องหมาย '@' ตามด้วยชื่อที่คุณต้องการตั้ง มาพิจารณาการกำหนดอาร์เรย์ใน Perl กัน
@array ของฉัน;
นี่คือวิธีที่เรากำหนดอาร์เรย์ใน Perl คุณอาจกำลังคิดว่าเราต้องจัดเก็บข้อมูลไว้ในนั้นอย่างไร มีหลายวิธีในการจัดเก็บข้อมูลในอาเรย์ ขึ้นอยู่กับว่าคุณจะใช้มันอย่างไร
my @array=(a,b,c,d); print @array;
Output:
ABCD
นี่คืออาร์เรย์ที่มี 4 องค์ประกอบอยู่ในนั้น
ดัชนีอาร์เรย์เริ่มต้นจาก 0 และสิ้นสุดจนถึงขนาดสูงสุดที่ประกาศ ในกรณีนี้ ขนาดดัชนีสูงสุดคือ 3
ตัวอย่างอาร์เรย์ Perl
คุณยังสามารถประกาศอาร์เรย์ด้วยวิธีข้างต้นได้ ข้อแตกต่างเพียงอย่างเดียวคือเก็บข้อมูลไว้ในอาร์เรย์โดยพิจารณาจากช่องว่างที่เป็นตัวคั่น ในที่นี้ qw() หมายถึงคำพูดที่อ้างอิง ความสำคัญของฟังก์ชันนี้คือการสร้างรายการคำ คุณสามารถใช้ qw ได้หลายวิธีในการประกาศอาร์เรย์
@array1=qw/a b c d/; @array2= qw' p q r s'; @array3=qw { v x y z}; print @array1; print @array2; print @array3;
Output:
abcdpqrsvxyz
สมมติว่าคุณต้องการกำหนดค่าให้กับ 5th องค์ประกอบของอาร์เรย์ เราจะทำสิ่งนั้นได้อย่างไร
$อาร์เรย์ [4] ='e';
อาร์เรย์ลำดับ
อาร์เรย์แบบต่อเนื่องคืออาร์เรย์ที่คุณจัดเก็บข้อมูลแบบต่อเนื่อง สมมติว่าคุณต้องการจัดเก็บตัวเลขหรือตัวอักษร 1-10 ตัวในอาร์เรย์ แทนที่จะพิมพ์ตัวอักษรทั้งหมด คุณสามารถลองทำสิ่งต่อไปนี้:
@numbers= (1..10); print @numbers; #Prints numbers from 1 to 10;
Output:
12345678910
ขนาดอาร์เรย์ Perl
เรามีอาร์เรย์ที่มีอยู่แล้ว และคุณไม่รู้ว่าอาร์เรย์นั้นมีขนาดเท่าใด ดังนั้นวิธีที่เป็นไปได้ในการค้นหาคือวิธีใด
@array= qw/a b c d e/; print $size=scalar (@array);
เราจะได้ขนาดของอาร์เรย์โดยไม่ใช้ฟังก์ชันได้หรือไม่? ใช่เราทำได้
@array= qw/a b c d e/; print $size=scalar (@array); print "\n"; print $size=$#array + 1; # $#array will print the Max Index of the array, which is 5 in this case
Output:
5
5
อาร์เรย์แบบไดนามิก
วิธีการประกาศอาร์เรย์ข้างต้นเรียกว่า อาร์เรย์แบบคงที่โดยที่คุณทราบขนาดของอาร์เรย์
ไดนามิกอาร์เรย์คืออะไร?
อาร์เรย์แบบไดนามิกคือสิ่งที่คุณประกาศโดยไม่ระบุค่าใดๆ แล้วเราจะเก็บค่าไว้ในอาร์เรย์นั้นเมื่อใด? ง่ายๆ เราจัดเก็บไว้ระหว่างรันไทม์ นี่คือโปรแกรมง่ายๆ สำหรับสิ่งนั้น
เราจะใช้ฟังก์ชัน Perl ในตัวสำหรับการทำงานนี้
my $string="This is a kind of dynamic array"; my @array; @array=split('a',$string); foreach(@array) { print "$_ \n”; # This is a special variable which stores the current value. }
Output:
นี่คือ
ชนิดของ dyn
ไมค์
rr
y
ฟังก์ชัน split จะแบ่งเนื้อหาของสตริงออกเป็นอาร์เรย์ตามตัวคั่นที่ให้ไว้ ฟังก์ชันนี้จะกำจัดตัวคั่นออกจากสตริงด้วย ในกรณีนี้คือ 'a'
Push, Pop, shift, unshift สำหรับอาร์เรย์ Perl:
ฟังก์ชันเหล่านี้สามารถใช้ในภาษา Perl เพื่อเพิ่ม/ลบองค์ประกอบอาร์เรย์
- Perl Push: เพิ่มองค์ประกอบอาร์เรย์ที่ส่วนท้ายของอาร์เรย์ที่มีอยู่
- Perl Pop: ลบองค์ประกอบสุดท้ายออกจากอาร์เรย์
- Perl Shift: ลบองค์ประกอบแรกออกจากอาร์เรย์
- Perl Unshift: เพิ่มองค์ประกอบที่จุดเริ่มต้นของอาร์เรย์
เรามาดูตัวอย่างที่เราสามารถใช้ฟังก์ชันด้านล่างนี้ได้
@days = ("Mon","Tue","Wed"); print "1st : @days\n"; push(@days, "Thu"); # adds one element at the end of an array print "2nd when push : @days\n"; unshift(@days, "Fri"); # adds one element at the beginning of an array print "3rd when unshift : @days\n"; pop(@days); print "4th when pop : @days\n"; # remove one element from the last of an array. shift(@days); # remove one element from the beginning of an array. print "5th when shift : @days\n";
Output:
วันที่ 1 : จันทร์ อังคาร พุธ
ครั้งที่ 2 เมื่อกด : จันทร์ อังคาร พุธ พฤหัสบดี
3. เมื่อไม่เลื่อนกะ : ศุกร์ จันทร์ อังคาร พุธ พฤหัสบดี
ที่ 4 เมื่อป๊อป : ศุกร์ จันทร์ อังคาร พุธ
5. เวลากะ : จันทร์ อังคาร พุธ
Perl แฮช
ทำไมเราถึงต้องการแฮช?
เราได้เรียนรู้เกี่ยวกับสเกลาร์และอาร์เรย์ในส่วนที่แล้วแล้ว
สเกลาร์ทำอะไรกันแน่? เก็บเฉพาะจำนวนเต็มและสตริงเท่านั้น
อาร์เรย์ทำอะไรกันแน่? เป็นชุดของสเกลาร์ที่คุณเข้าถึงแต่ละองค์ประกอบของอาร์เรย์โดยใช้ดัชนี แต่นี่เป็นความคิดที่ดีหรือไม่ที่จะใช้อาร์เรย์เมื่อคุณมีบันทึกนับแสนรายการ เราจะลืมว่าดัชนีใดมีค่าเท่าใด เพื่อเอาชนะสถานการณ์นี้ เรามีบางอย่างเช่น Perl hash
แฮชคืออะไร?
แฮชยังสามารถเก็บสเกลาร์ได้มากเท่าที่อาร์เรย์จะเก็บได้ ข้อแตกต่างเพียงอย่างเดียวคือเราไม่มีดัชนีแต่เรามีคีย์และค่า สามารถประกาศแฮชได้ โดยเริ่มต้นด้วย % ตามด้วยชื่อของแฮช มาดูตัวอย่างว่าเราจะกำหนดแฮช Perl ได้อย่างไร และเราจะแยกความแตกต่างจากอาร์เรย์ได้อย่างไร
ลองพิจารณาตัวอย่างของคนสามคนโดยแสดงอายุของพวกเขาในอาร์เรย์
@array=('Sainath',23,'Krishna',24,'Shruthi',25); #This is how an array looks. print @array;
Output:
สายนาถ33Krishna24ชรูธี25
วิธีนี้เป็นการยากที่จะทราบอายุของแต่ละบุคคล เนื่องจากเราต้องจำทั้งตำแหน่งดัชนีของชื่อและอายุของทุกคน มันอาจจะง่ายถ้าคุณมี 3 ชื่อ แต่เมื่อคุณมี 1000 ชื่อขึ้นไป? คุณรู้คำตอบ.
สิ่งนี้เราสามารถเอาชนะได้โดยใช้แฮช
ตัวอย่างแฮช:
print %hash=( 'Sainath' => 23, 'Krishna' => 24, 'Shruthi' => 25); # This is how we create a hash. print %hash=('Sainath',23,'Krishna',24,'Shruthi',25);# This way of assigning is called list.
Output:
สายนาถ33Krishna24ชรูธี25ไซนาท33Krishna24ชรูธี25
ตอนนี้เราได้ประกาศแฮชแล้ว เยี่ยมมาก!! แต่เราจะเข้าถึงหรือพิมพ์มันได้อย่างไร? แต่ละองค์ประกอบในแฮชควรเข้าถึงได้ด้วยคีย์ที่เกี่ยวข้องซึ่งจะมีการกำหนดค่า ดังนั้นจึงมีการแมปแบบหนึ่งต่อหนึ่งระหว่างแต่ละคีย์และค่าในแฮช
หากต้องการพิมพ์อายุของบุคคลใดๆ คุณเพียงแค่ต้องจำชื่อของบุคคลนั้นเท่านั้น
print $hash{'Krishna'}; # This how we should access a hash. Key enclosed within {}.
คุณอาจสงสัยว่าทำไมฉันถึงใช้ $hash{KeyName} จำไว้ว่าแฮชคือชุดของสเกลาร์อีกครั้ง ดังนั้นเราจึงสามารถใช้ $ ซึ่งแสดงถึงสเกลาร์เพื่อเข้าถึงแต่ละองค์ประกอบแฮช
หมายเหตุ: แต่ละคีย์ในแฮชควรไม่ซ้ำกัน ไม่เช่นนั้นมันจะแทนที่ค่าของคุณซึ่งถูกกำหนดไว้ก่อนหน้านี้
เราจะกำหนดแฮชให้กับแฮชอื่นได้อย่างไร? เรียบง่ายแบบเดียวกับที่เราทำเพื่อ
นอกจากนี้เรายังสามารถพิมพ์แฮชทั้งหมดได้
%hash=( 'Tom' => 23); %newHash=%hash; # Assigning hash to a new hashprint %newHash; print %newHash;
Output:
Tom23
เพิ่มแฮช Perl
อย่างที่คุณเห็นเรามีแฮช %newHash อยู่แล้ว และตอนนี้เราจำเป็นต้องเพิ่มรายการเข้าไปอีก
$newHash{'Jim'}=25; $newHash{'John'}=26; $newHash{'Harry'}=27; print %newHash;
Output:
จิม25จอห์น26แฮร์รี่27
ปุ่มลบ Perl
คุณอาจต้องการลบรายการออกจากแฮช นี่คือวิธีที่เราสามารถทำเช่นนั้นได้
delete $newHash{'Jim'};#This will delete an entry from the hash.
Delete เป็นฟังก์ชัน inbuilt ของ Perl เราจะเห็นตัวอย่างการกำหนดแฮชให้กับอาร์เรย์
@array=%newHash; print "@array";
หมายเหตุ: เมื่อใดก็ตามที่คุณพิมพ์แฮชหรือเมื่อคุณเก็บแฮชไว้ในอาร์เรย์ ลำดับอาจแตกต่างกันเสมอ มันไม่เหมือนกันเสมอไป
เราสามารถกำหนดเฉพาะคีย์หรือค่าของแฮชให้กับอาร์เรย์ได้
@arraykeys= keys(%newHash); @arrayvalues=values(%newHash); print "@arraykeys\n"; print "@arrayvalues\n"; # \n to print new line.
หากต้องการลบรายการทั้งหมดในแฮช เราสามารถกำหนดให้แฮชเป็นโมฆะได้โดยตรง
%newHash=();# สิ่งนี้จะกำหนดแฮชใหม่โดยไม่มีรายการ
งบเงื่อนไข Perl
เราสามารถใช้คำสั่งแบบมีเงื่อนไขในภาษา Perl ได้ ดังนั้นคำสั่งแบบมีเงื่อนไขคืออะไร? คำสั่งแบบมีเงื่อนไขคือคำสั่งที่คุณตรวจสอบสถานการณ์บางอย่างเพื่อให้สอดคล้องกับโค้ดของคุณ
ลองนึกถึงตัวอย่าง คุณกำลังซื้อผลไม้ และคุณไม่ชอบราคาที่เกินกว่า 100 เหรียญสหรัฐ ดังนั้น กฎที่นี่คือ 100 เหรียญ
Perl รองรับคำสั่งแบบมีเงื่อนไขสองประเภท พวกเขาเป็นเช่นนั้นและเว้นแต่
เพิร์ลถ้า
หากบล็อกโค้ดจะถูกดำเนินการ เมื่อเงื่อนไขเป็นจริง
my $a=5; if($a==5) { print "The value is $a"; }
Output:
5
Perl ถ้าเป็นอย่างอื่น
นี่ก็ดูดี ลองคิดถึงสถานการณ์ที่ $a ไม่ใช่ 5
my $a=10; if($a==5) { print "The values is $a ---PASS"; } else { print "The value is $a ---FAIL"; }
Output:
ค่าคือ 10 —FAIL
วิธีนี้ทำให้เราสามารถควบคุมเงื่อนไขได้ครั้งละหนึ่งเงื่อนไขเท่านั้น มันเป็นข้อจำกัดหรือไม่? ไม่ คุณยังสามารถควบคุมเงื่อนไขต่างๆ ได้โดยใช้ if… elsif … else
Perl อื่นถ้า
my $a=5; if($a==6) { print "Executed If block -- The value is $a"; } elsif($a==5) { print "Executed elsif block --The value is $a"; } else { print "Executed else block – The value is $a"; }
Output:
ดำเนินการบล็อก elsif – ค่าคือ 5
ในกรณีข้างต้น บล็อก elsif จะถูกดำเนินการเมื่อ $a เท่ากับ 5
อาจมีสถานการณ์ที่โค้ดบล็อกทั้ง if และ elsif จะล้มเหลว ในสถานการณ์สมมตินี้ บล็อกรหัสอื่นจะถูกดำเนินการ คุณสามารถกำจัดการตรวจสอบโค้ด else ได้จริงหากคุณไม่ต้องการรวมไว้
Perl ซ้อนกันถ้า
ในกรณีนี้ คุณสามารถใช้ if code block ในอีกหนึ่ง if code block ได้
my $a=11; #Change values to 11,2,5 and observe output if($a<10){ print "Inside 1st if block"; if($a<5){ print "Inside 2nd if block --- The value is $a"; } else{ print " Inside 2nd else block --- The value is $a"; } } else{ print "Inside 1st else block – The value is $a"; }
Output:
ภายในบล็อกที่ 1 อื่น – ค่าคือ 11
รันโค้ดเดียวกันโดยเปลี่ยนค่าของ $a; คุณสามารถค้นหาส่วนที่เหลือได้
Perl เว้นแต่
คุณมีความคิดอยู่แล้วว่าจะเกิดอะไรขึ้น (หากเงื่อนไขเป็นจริง จะดำเนินการบล็อคโค้ด) เว้นแต่จะตรงกันข้ามกับ if เว้นแต่ว่าโค้ดบล็อกจะถูกดำเนินการหากเงื่อนไขเป็นเท็จ
my $a=5; unless($a==5) { print "Inside the unless block --- The value is $a"; } else { print "Inside else block--- The value is $a"; }
Output:
ภายในบล็อกที่ 1 อื่น – ค่าคือ 5
คาดเดาสิ่งที่จะออกมา ถูกต้องครับ!!!!!. ผลลัพธ์จะเป็นคำสั่งการพิมพ์ของบล็อก else เนื่องจากเงื่อนไขในเว้นแต่ว่าบล็อกโค้ดจะเป็นจริง จำไว้ว่าเว้นแต่ว่าบล็อกจะถูกดำเนินการเฉพาะในกรณีที่เงื่อนไขเป็นเท็จ เปลี่ยนค่าของ $a และรันโค้ดคุณจะเห็นความแตกต่าง
Perl ใช้ถ้า
$a= " This is Perl"; if($a eq "SASSDSS"){ print "Inside If Block"; } else { print "Inside else block" }
Output:
ข้างในบล็อกอื่น
ใช้เว้นแต่
$a= " This is Perl"; unless($a eq "SASSDSS"){ print "Inside unless Block"; } else { print "Inside else block" }
Output:
ข้างในยกเว้นบล็อค
Perl Loops – โครงสร้างการควบคุม
Perl รองรับโครงสร้างการควบคุมที่คล้ายคลึงกับภาษาการเขียนโปรแกรมอื่นๆ Perl รองรับโครงสร้างการควบคุมสี่ประเภท for, foreach, while และ until เราใช้คำสั่งเหล่านี้เพื่อรันโค้ดบางโค้ดซ้ำๆ
สำหรับลูป Perl
สำหรับโค้ดบล็อกจะดำเนินการจนกว่าจะตรงตามเงื่อนไข ลองมาดูตัวอย่างวิธีการ Perl วนอาร์เรย์
my @array=(1..10); for(my $count=0;$count<10;$count++) { print "The array index $count value is $array[$count]"; print "\n"; }
Output:
ค่าดัชนีอาร์เรย์ 0 คือ 1
ค่าดัชนีอาร์เรย์ 1 คือ 2
ค่าดัชนีอาร์เรย์ 2 คือ 3
ค่าดัชนีอาร์เรย์ 3 คือ 4
ค่าดัชนีอาร์เรย์ 4 คือ 5
ค่าดัชนีอาร์เรย์ 5 คือ 6
ค่าดัชนีอาร์เรย์ 6 คือ 7
ค่าดัชนีอาร์เรย์ 7 คือ 8
ค่าดัชนีอาร์เรย์ 8 คือ 9
ค่าดัชนีอาร์เรย์ 9 คือ 10
ในนิพจน์ for () มีหลายข้อความรวมอยู่ด้วย มีความหมายสำหรับแต่ละคน
สำหรับ ( การเริ่มต้น ; เงื่อนไข ; การเพิ่มขึ้น)
นี่เป็นอีกวิธีหนึ่งในการใช้ for
for(1..10) { print "$_ n"; print "\n"; }
Output:
1n
2n
3n
4n
5n
6n
7n
8n
9n
10n
Perl Foreach
สำหรับแต่ละคำสั่งสามารถใช้ในลักษณะเดียวกับสำหรับ; ข้อแตกต่างที่สำคัญคือเราไม่มีการตรวจสอบเงื่อนไขใดๆ และเพิ่มขึ้นในส่วนนี้
ลองใช้ตัวอย่างเดียวกันกับ foreach perl
my @array=(1..10); foreach my $value (@array) { print " The value is $value\n"; }
Output:
ค่าคือ 1
ค่าคือ 2
ค่าคือ 3
ค่าคือ 4
ค่าคือ 5
ค่าคือ 6
ค่าคือ 7
ค่าคือ 8
ค่าคือ 9
ค่าคือ 10
Foreach รับแต่ละองค์ประกอบของอาร์เรย์และกำหนดค่านั้นให้กับ $var สำหรับการวนซ้ำทุกครั้ง เรายังสามารถใช้ $_ เหมือนกันได้
my @array=(1..10); foreach(@array) { print " The value is $_ \n"; # This is same as the above code. }
Output:
ค่าคือ 1
ค่าคือ 2
ค่าคือ 3
ค่าคือ 4
ค่าคือ 5
ค่าคือ 6
ค่าคือ 7
ค่าคือ 8
ค่าคือ 9
ค่าคือ 10
นี่ดูดีสำหรับการเข้าถึงอาร์เรย์ แล้วแฮชเราจะรับแฮชคีย์และค่าโดยใช้ foreach ได้อย่างไร?
เราสามารถใช้ foreach เพื่อเข้าถึงคีย์และค่าของแฮชได้โดยการวนลูป
my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25); foreach my $key (keys %hash) { print "$key \n"; }
Output:
มิกกี้
ทอม
เจอร์รี่
คุณอาจสงสัยว่าทำไมเราถึงใช้ Keys ใน foreach() Keys เป็นฟังก์ชัน inbuilt ของ Perl ซึ่งเราสามารถเข้าถึงคีย์ของแฮชได้อย่างรวดเร็ว แล้วค่านิยมล่ะ? เราสามารถใช้ฟังก์ชันค่าเพื่อเข้าถึงค่าของแฮชได้
my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25); foreach my $value(values %hash) # This will push each value of the key to $value { print " the value is $value \n"; }
Output:
ค่าคือ 24
ค่าคือ 23
ค่าคือ 25
Perl ในขณะที่
Perl While loop เป็นโครงสร้างการควบคุม โดยที่โค้ดบล็อกจะถูกดำเนินการจนกว่าเงื่อนไขจะเป็นจริง
บล็อกโค้ดจะออกก็ต่อเมื่อเงื่อนไขเป็นเท็จ
ลองใช้ตัวอย่างสำหรับ Perl While loop
นี่คือปัญหาซึ่งจะต้องได้รับข้อมูลจากผู้ใช้และจะไม่ออกจนกว่าจะได้หมายเลขที่ระบุเป็น '7'
#!/usr/bin/perl $guru99 = 0; $luckynum = 7; print "Guess a Number Between 1 and 10\n"; $guru99 = <STDIN>; while ($guru99 != $luckynum) { print "Guess a Number Between 1 and 10 \n "; $guru99 = <STDIN>; } print "You guessed the lucky number 7"
Output:
เดาตัวเลขระหว่าง 1 ถึง 10
9
เดาตัวเลขระหว่าง 1 ถึง 10
5
เดาตัวเลขระหว่าง 1 ถึง 10
7
คุณทายเลขนำโชค 7 แล้ว
ในตัวอย่างข้างต้น เงื่อนไข while จะไม่เป็นจริงหากเราป้อนข้อมูลอื่นที่ไม่ใช่ '7'
หากคุณเห็นว่า while ทำงานที่นี่อย่างไร บล็อกโค้ดจะดำเนินการก็ต่อเมื่อเงื่อนไขในชั่วขณะหนึ่งเป็นจริงเท่านั้น
Perl ทำในขณะที่
Do while loop จะดำเนินการอย่างน้อยหนึ่งครั้ง แม้ว่าเงื่อนไขในส่วน while จะเป็นเท็จก็ตาม
ลองใช้ตัวอย่างเดียวกันโดยใช้ do while
$guru99 = 10; do { print "$guru99 \n"; $guru99--; } while ($guru99 >= 1); print "Now value is less than 1";
Output:
10
9
8
7
6
5
4
3
2
1
ตอนนี้ค่าน้อยกว่า 1
เพิร์ลจนกระทั่ง
จนกระทั่งบล็อกโค้ดจะคล้ายกับเว้นแต่ในคำสั่งแบบมีเงื่อนไข ในที่นี้ บล็อกโค้ดจะดำเนินการก็ต่อเมื่อเงื่อนไขในบล็อกจนกระทั่งเป็นเท็จเท่านั้น
ลองใช้ตัวอย่างเดียวกันกับที่เราใช้ในกรณีที่ผ่านไประยะหนึ่งแล้ว
นี่คือปัญหาซึ่งจะต้องได้รับข้อมูลจากผู้ใช้และจะไม่ออกจนกว่าจะได้ชื่อที่ระบุเป็นชื่ออื่นที่ไม่ใช่ 'sai'
print "Enter any name \n"; my $name=<STDIN>; chomp($name); until($name ne 'sai') { print "Enter any name \n"; $name=<STDIN>; chomp($name); }
Output:
ใส่ชื่ออะไรก็ได้
Perl ทำจนถึง:
Do until สามารถใช้ได้เฉพาะเมื่อเราต้องการให้เงื่อนไขเป็นเท็จ และควรดำเนินการอย่างน้อยหนึ่งครั้ง
print "Enter any name \n"; my $name=<STDIN>; chomp($name); do { print "Enter any name \n"; $name=<STDIN>; chomp($name); }until($name ne 'sai');
Output:
ป้อนชื่อใด ๆ ฮาวเวิร์ด
ป้อนชื่อเชลดอน
ใส่ชื่ออะไรก็ได้
ดำเนินการ while, do- While, until และ do-until โค้ดตัวอย่างเพื่อดูความแตกต่าง
Perl OperaTor
ความหมายของ Operaทอร์?
Operaทอร์ในภาษาคอมพิวเตอร์บ่งบอกถึงการกระทำที่สามารถทำได้กับชุดตัวแปรหรือค่าบางชุดที่คอมพิวเตอร์สามารถเข้าใจได้ Perl ได้รวมเอาส่วนใหญ่ของ Operators จากภาษา C Perl มีตัวดำเนินการมากมายเมื่อเทียบกับภาษาโปรแกรมอื่น Operaตัวดำเนินการสามารถแบ่งประเภทได้เป็นตัวดำเนินการทางคณิตศาสตร์ ตัวดำเนินการเชิงตรรกะ ตัวดำเนินการเชิงสัมพันธ์ และตัวดำเนินการกำหนดค่า
คณิตศาสตร์ Operaทอร์:
ตัวดำเนินการเลขคณิตคือตัวดำเนินการที่สามารถใช้ดำเนินการทางคณิตศาสตร์พื้นฐานได้ ตัวดำเนินการเลขคณิตเหล่านี้เป็นตัวดำเนินการแบบไบนารีซึ่งเราต้องใช้ตัวแปรสองตัวในการดำเนินการพื้นฐาน นอกจากนี้ เรายังสามารถใช้ตัวดำเนินการแบบยูนารีสำหรับการดำเนินการพื้นฐานอื่นๆ ได้ด้วย คุณสามารถดูความแตกต่างได้ในตัวอย่างด้านล่าง
OperaTor | Descriptไอออน | ตัวอย่าง |
---|---|---|
+ |
การดำเนินการบวกที่ใช้สำหรับการบวกค่าหรือตัวแปรสองตัว การถือครองคุณค่า |
$x=5+6; # หรือ $y=6; $z=$x+$y; |
- |
ตัวดำเนินการลบที่ใช้สำหรับลบค่าสองค่าหรือตัวแปรที่เก็บค่าไว้ |
$x=6-5; # หรือ $y=6; $z=$x-$y; |
* |
ตัวดำเนินการคูณที่ใช้สำหรับคูณค่าสองค่าหรือตัวแปรที่เก็บค่า |
$x=6*5; # หรือ $y=6; $z=$x*$y; |
/ |
ตัวดำเนินการหารที่ใช้สำหรับหารค่าสองค่าหรือตัวแปรที่เก็บค่า |
$x=36/6; # หรือ $y=6; $z=$x/$y; |
** |
ตัวดำเนินการเลขยกกำลังที่ใช้ในการระบุเลขยกกำลังและรับค่า ตัวอย่าง : 22 = 43 = 27 |
$x=5**5; # หรือ $x=4; $y=2; $z=$x**$y; |
% |
ตัวดำเนินการโมดูลัสที่ใช้ในการรับคำเตือนในระหว่างการหารค่าสองค่าหรือตัวแปรที่เก็บค่า |
$x=5%2; # หรือ $x=10; $y=2; $z=$x % $y; |
++ |
ตัวดำเนินการการบวกแบบยูนารีเพื่อเพิ่มค่าของตัวแปรขึ้น 1 |
$x=5; $x++; Or ++$x; |
- |
ตัวดำเนินการลบยูนารีเพื่อลดค่าของตัวแปรลง 1 |
$x=5; $x–; #หลังลด Or –$x;# ลดลงก่อน |
ตัวอย่างการดำเนินการทั้งหมดข้างต้นให้เสร็จสมบูรณ์
my $x=10; my $y=2; my $z; $z=$x+$y; print ("Add of $x and $y is $z \n"); $z=$x-$y; print ("Sub of $x and $y is $z \n"); $z=$x*$y; print ("Mul of $x and $y is $z \n"); $z=$x/$y; print ("Div of $x and $y is $z \n"); $z=$x**$y; print ("Exp of $x and $y is $z \n"); $z=$x%$y; print ("Mod of $x and $y is $z \n");
Output:
บวก 10 และ 2 คือ 12
ย่อยของ 10 และ 2 คือ 8
มัลของ 10 และ 2 คือ 20
div ของ 10 และ 2 คือ 5
Exp ของ 10 และ 2 คือ 100
Mod ของ 10 และ 2 คือ 0
การมอบหมาย Operaทอร์:
ตัวดำเนินการกำหนดค่าจะเพียงกำหนดค่าให้กับตัวแปร แต่มีอีกสิ่งหนึ่งที่เราต้องจำไว้ นั่นก็คือ ตัวดำเนินการกำหนดค่าจะดำเนินการทางคณิตศาสตร์ด้วย และกำหนดค่าใหม่ให้กับตัวแปรเดียวกันที่ดำเนินการด้วย
OperaTor | Descriptไอออน | ตัวอย่าง |
---|---|---|
+= |
ตัวดำเนินการเพิ่มเติมที่ใช้ในการเพิ่มและกำหนดค่าให้กับตัวแปรเดียวกัน |
$x=4; $x+=10; |
-= |
ตัวดำเนินการลบที่ใช้ในการลบและกำหนดค่าให้กับตัวแปรเดียวกัน |
$x=4; $x-=10; |
*= |
ตัวดำเนินการคูณที่ใช้ในการบวกและกำหนดค่าให้กับตัวแปรเดียวกัน |
$x=4; $x*=10; |
/= |
ตัวดำเนินการหารที่ใช้ในการหารและกำหนดค่าให้กับตัวแปรเดียวกัน |
$x=4; $x/=10; |
- |
ตัวดำเนินการเลขยกกำลังที่ใช้ในการรับเลขยกกำลังและกำหนดค่าให้กับตัวแปรเดียวกัน |
$x=4; $x**=10; |
%= |
ตัวดำเนินการโมดูลัสที่ใช้ในการรับคำเตือนในระหว่างการหารและกำหนดค่าให้กับตัวแปรเดียวกัน |
$x=10; $x%=4; |
ตัวอย่างการดำเนินการทั้งหมดข้างต้นให้เสร็จสมบูรณ์
my $x=10; $x+=5; print("Add = $x\n"); $x-=5; print("Sub= $x\n"); $x*=5; print("Mul = $x\n"); $x/=5; print("Div = $x\n");
Output:
เพิ่ม = 15
ย่อย= 10
มูล = 50
ดิฟ = 10
ตรรกะและเชิงสัมพันธ์ Operaทอร์:
Perl ใช้ตัวดำเนินการเชิงตรรกะเพื่อเปรียบเทียบตัวเลขและสตริง โดยส่วนใหญ่แล้วตัวดำเนินการเชิงตรรกะจะใช้ในคำสั่งเงื่อนไข
ตรรกะและเชิงสัมพันธ์ Operaทอร์ในภาษา Perl
OperaTor | Descriptไอออน |
---|---|
==หรือเทียบเท่า |
OperaTor ใช้ในการตรวจสอบว่าตัวแปรทั้งสองเท่ากันหรือไม่ |
!=หรือไม่มี |
OperaTor ใช้ในการตรวจสอบว่าตัวแปรทั้งสองไม่เท่ากันหรือไม่ |
> หรือ gt |
Operator เคยตรวจสอบว่า A มากกว่า B |
<or lt |
Operator เคยตรวจสอบว่า A น้อยกว่า B |
>=หรือจี |
Operator เคยตรวจสอบว่า A มากกว่าหรือเท่ากับ B |
<=หรือเลอ |
Operator เคยตรวจสอบว่า A น้อยกว่าหรือเท่ากับ B |
- หรือหรือ |
Operaทอร์ใช้ในการตรวจสอบว่า A หรือ B ถือค่าอยู่ |
&&หรือและ |
Operaทอร์ใช้ตรวจสอบทั้ง A และ B ว่ามีค่าอยู่หรือไม่ |
ให้เรายกตัวอย่างที่เราสามารถอธิบายสถานการณ์ทั้งหมดได้
my $x=5; my $y=5; if($x == $y){ print ("True -- equal $x and $y \n"); } else{ print ("False -- not equal $x and $y\n"); } $x=6; $y=7; if($x != $y){ print ("True -- not equal $x and $y\n"); } else{ print ("False -- equal $x and $y\n"); } if($y > $x){ print ("True -- $y greater than $x\n"); } else{ print ("False -- $y greater than $x\n"); } if($x < $y){ print ("True -- $x less than $y\n"); } else{ print ("False -- $x less than $y\n"); } if($x <= $y){ print ("True -- $x less than $y\n"); } else{ print ("False -- $x less than $y\n"); } if($y >= $x){ print ("True -- $y greater than $x\n"); } else{ print ("False -- $y greater than $x\n"); }
Output:
จริง — เท่ากับ 5 และ 5
จริง — ไม่เท่ากับ 6 และ 7
จริง — 7 มากกว่า 6
จริง — 6 น้อยกว่า 7
จริง — 6 น้อยกว่า 7
จริง — 7 มากกว่า 6
คุณสามารถดูตัวอย่างตัวดำเนินการเชิงตรรกะได้ในหัวข้อถัดไป
ตัวแปรพิเศษ Perl
ตัวแปรพิเศษ Perl คืออะไร?
ตัวแปรพิเศษในภาษา Perl คือตัวแปรที่มีความหมายที่กำหนดไว้ล่วงหน้า ตัวแปรเหล่านี้แสดงด้วยชื่อจริงหรือสัญลักษณ์เครื่องหมายวรรคตอน เรามีตัวแปรพิเศษสำหรับตัวแปรที่สนับสนุน Perl ทั้งหมด เช่น ตัวแปรพิเศษสเกลาร์ ตัวแปรพิเศษอาร์เรย์ ตัวแปรพิเศษแฮช ตัวแปรพิเศษส่วนใหญ่ที่เราใช้เป็นตัวแปรสเกลาร์
เมื่อเราต้องการใช้ตัวแปรพิเศษกับชื่อของมัน เราต้องโหลดโมดูล Perl 'use English' เพื่อพูดอย่างชัดเจนกับล่าม Perl ว่าเราจะใช้ตัวแปรพิเศษโดยใช้ชื่อของมัน
ตัวแปรพิเศษสเกลาร์
ตัวแปร | Descriptไอออน |
---|---|
$_$ARG |
นี่คือตัวแปรเริ่มต้นที่เก็บค่าปัจจุบัน |
$0 หรือ $PROGRAM_NAME |
เก็บชื่อไฟล์ของสคริปต์ Perl |
$/ |
ตัวคั่นบันทึกอินพุต ซึ่งมีค่าเริ่มต้นเป็น '\n' ซึ่งเป็นอักขระขึ้นบรรทัดใหม่ |
$. |
เก็บหมายเลขบรรทัดปัจจุบันของไฟล์ที่กำลังอ่าน |
$, |
ตัวคั่นฟิลด์เอาท์พุต ส่วนใหญ่จะใช้โดยคำสั่ง print() โดยค่าเริ่มต้นนี้ตั้งเป็น 0 เราสามารถเปลี่ยนค่าของตัวแปรนี้ได้ |
$\ |
ตัวคั่นบันทึกเอาต์พุต ค่าของตัวแปรนี้จะว่างเปล่า เราสามารถกำหนดค่าใดๆ ให้กับสิ่งนี้ได้ ซึ่งจะถูกใช้โดยคำสั่ง print() ขณะพิมพ์ผลลัพธ์ |
$# |
ตัวแปรนี้ใช้สำหรับรูปแบบผลลัพธ์ขณะพิมพ์ตัวเลข |
$%$FORMAT_PAGE_NUMBER |
จะเก็บหมายเลขหน้าปัจจุบันของไฟล์ที่อ่าน |
$=$FORMAT_LINES_PER_PAGE |
จะเก็บความยาวหน้าปัจจุบันของไฟล์ที่อ่าน |
$-$FORMAT_LINES_LEFT |
เก็บค่าของจำนวนบรรทัดที่เหลือในการพิมพ์จากเพจ |
$~$FORMAT_NAME |
ชื่อรูปแบบ: เก็บรูปแบบของเอาต์พุตที่เลือกในปัจจุบันตามค่าเริ่มต้นชื่อตัวจัดการไฟล์ |
$^$FORMAT_TOP_NAME |
เก็บค่าของรูปแบบส่วนหัวของตัวจัดการไฟล์ โดยค่าเริ่มต้นจะเป็น _TOP ตามด้วยชื่อตัวจัดการไฟล์ |
$|$OUTPUT_AUTOFLUSH |
ค่าเริ่มต้นเป็นศูนย์ ซึ่งใช้ในการล้างบัฟเฟอร์เอาต์พุตหลังจากการเขียน () หรือการพิมพ์ () ทุกครั้ง |
$$ |
จะเก็บหมายเลขกระบวนการทำงานของล่าม Perl |
$? |
รหัสสถานะ : การเรียกไปป์และระบบ สถานะการส่งคืนของคำสั่งที่ดำเนินการ |
$&$ตรงกัน |
ใช้ในนิพจน์ทั่วไป ซึ่งจะเก็บสตริงของการจับคู่รูปแบบที่สำเร็จครั้งล่าสุด |
$`$พรีแมตช์ |
ใช้ในนิพจน์ทั่วไป ซึ่งจะเก็บสตริงที่นำหน้าด้วยการจับคู่รูปแบบที่สำเร็จครั้งล่าสุด |
$'$หลังการแข่งขัน |
ใช้ในนิพจน์ทั่วไป ซึ่งจะเก็บสตริงที่ตามด้วยการจับคู่รูปแบบที่สำเร็จครั้งล่าสุด |
$+$LAST_PAREN_MATCH |
เก็บสตริงของวงเล็บสุดท้ายที่ตรงกับการค้นหารูปแบบสุดท้าย |
- |
$1, $2, $3 …. เก็บค่าของรูปแบบที่ตรงกันตามลำดับ |
$[ |
ดัชนีแรก: Array ซึ่งเป็นสตริงย่อย |
$] |
เวอร์ชันของ Perl |
- |
ตัวคั่นที่ใช้สำหรับองค์ประกอบรายการ โดยค่าเริ่มต้นคือช่องว่าง |
$; |
ตัวคั่นตัวห้อยที่ใช้ในอาร์เรย์หลายมิติ |
$! |
ในบริบทที่เป็นตัวเลข ให้พิมพ์หมายเลขข้อผิดพลาด ในบริบทสตริง พิมพ์ข้อผิดพลาด |
$@ |
จะเก็บข้อมูลข้อผิดพลาดทางไวยากรณ์ซึ่งใช้เมื่อใช้ eval() |
$< |
เก็บ UID จริง (รหัสผู้ใช้) ของกระบวนการที่รันสคริปต์ |
$> |
เก็บ UID ที่มีประสิทธิผลของกระบวนการที่รันสคริปต์ |
$( |
เก็บ GID จริง (รหัสกลุ่ม) ของกระบวนการที่รันสคริปต์ |
$) |
เก็บ GID ที่มีประสิทธิผลของกระบวนการที่รันสคริปต์ |
$^D$การดีบัก |
เก็บค่าปัจจุบันของแฟล็กการดีบัก |
$^ค |
เก็บค่าปัจจุบันของแฟล็กเมื่อใช้สวิตช์บรรทัดคำสั่ง –c |
$^ฟ |
ตัวอธิบายไฟล์ระบบสูงสุดตามค่าเริ่มต้นถูกตั้งค่าเป็น 2 |
$^I$INPLACE_EDIT |
เก็บค่าของสวิตช์บรรทัดคำสั่ง –i |
$^ม |
สามารถใช้พูลหน่วยความจำพิเศษได้เมื่อสคริปต์ Perl เสียชีวิตโดยมีข้อผิดพลาดของหน่วยความจำออก |
$^O$OSNAME |
Operaข้อมูลระบบ Ting ถูกเก็บไว้ 'Linux' สำหรับระบบ Linux, 'mswin32' สำหรับ Windows ระบบ |
$^T$BASETIME |
เวลาที่สคริปต์กำลังทำงานในหน่วยวินาที |
$^W$คำเตือน |
ค่าปัจจุบันของสวิตช์บรรทัดคำสั่ง –w สวิตช์เตือน |
$ARGV |
ชื่อของไฟล์ปัจจุบัน เมื่อใช้ <> |
ตัวแปรพิเศษอาร์เรย์:
ตัวแปร | Descriptไอออน |
---|---|
@ไอเอ็นซี |
เก็บรายการเส้นทางที่โมดูลหรือสคริปต์ไลบรารี Perl สามารถดูได้ในขณะที่เรียกใช้งานสคริปต์ปัจจุบัน @INC นี้ถูกใช้โดยการใช้งานและต้องการคำสั่งเพื่อค้นหาเส้นทางเหล่านั้นสำหรับโมดูลไลบรารี |
@ARGV |
เก็บอาร์กิวเมนต์บรรทัดคำสั่งที่ส่งผ่าน |
@_ |
ใช้ในรูทีนย่อยขณะส่งพารามิเตอร์ไปยังรูทีนย่อย |
@F |
นี่คืออาร์เรย์ที่ใช้จัดเก็บบรรทัดอินพุตเมื่อแยกอัตโนมัติ –a (ใช้สวิตช์บรรทัดคำสั่ง) |
ตัวแปรพิเศษแฮช:
ตัวแปร | Descriptไอออน |
---|---|
%อิงค์ |
ชื่อไฟล์จะเป็นคีย์ ค่าต่างๆ จะเป็นเส้นทางไปยังไฟล์เหล่านั้น ใช้โดย do, use และ need |
%ENV |
ตัวแปรสภาพแวดล้อมของระบบ |
%ซิก |
Signalตัวจัดการ |
นิพจน์ทั่วไปของ Perl
นิพจน์ทั่วไปคืออะไร?
นิพจน์ทั่วไปของ Perl นั้นมีความแข็งแกร่งเพียงพอในการจับคู่รูปแบบสตริงภายในคำสั่งหรือกลุ่มคำสั่ง นิพจน์ทั่วไปส่วนใหญ่ใช้ในการแยกข้อความ การจับคู่รูปแบบ และอื่นๆ อีกมากมาย ขึ้นอยู่กับความต้องการ เรามีตัวดำเนินการบางอย่างที่ใช้โดยเฉพาะในการผูกรูปแบบนิพจน์ทั่วไป =~ และ !~ ซึ่งเป็นตัวดำเนินการทดสอบและกำหนดค่า
นิพจน์ปกติ Operaโปร
นิพจน์ปกติ Operaทอร์ในภาษา Perl
- การแข่งขัน Perl — m//
- การทดแทน Perl – s///
- Perl ทับศัพท์ – tr///
ก่อนที่จะไปไกลกว่านี้ เราจำเป็นต้องรู้บางสิ่งเกี่ยวกับการแสดงออกปกติ มีบางอย่างเช่นอักขระ Meta, ไวด์การ์ดในรูปแบบ Perl Regex
ถ่าน | ความหมาย |
---|---|
\ |
พิเศษหรือใบเสนอราคา |
* |
จับคู่อักขระ 0 ตัวขึ้นไป |
+ |
จับคู่อักขระ 1 ตัวขึ้นไป |
? |
จับคู่อักขระ 0 หรือ 1 ตัว |
| |
สามารถใช้เพื่อจับคู่รูปแบบทางเลือก |
() |
ใช้สำหรับจัดเก็บลวดลายให้ตรงกัน |
[] |
สามารถส่งชุดอักขระได้ ใช้สำหรับตัวเลขและตัวอักษรโดยเฉพาะ |
{} |
ใช้สำหรับระบุจำนวนเวลาที่สามารถดำเนินการแข่งขันได้ |
^ |
จุดเริ่มต้นของสตริง |
$ |
จุดสิ้นสุดของสตริง |
\w |
ใช้เพื่อจับคู่อักขระเดี่ยวหรือคำที่สามารถเป็นตัวอักษรและตัวเลข รวมทั้ง “_” |
\W |
จับคู่สิ่งอื่นที่ไม่ใช่ตัวอักษรและตัวเลข |
\s |
ใช้เพื่อจับคู่ช่องว่าง |
\S |
จับคู่สิ่งอื่นที่ไม่ใช่ช่องว่าง |
\d |
จับคู่ตัวเลข ไม่ใช่ค่าทศนิยมและค่าลบ |
\D |
ตรงกับสิ่งอื่นใดนอกเหนือจากตัวเลข |
\t |
จับคู่พื้นที่แท็บ |
\n |
จับคู่ขึ้นบรรทัดใหม่ |
ด้านบนคือชุดอักขระที่สามารถใช้ระหว่างการจับคู่รูปแบบ
เรามาดูตัวอย่างกัน
พิจารณาสถานการณ์ที่ผู้ใช้ให้ข้อมูลบางอย่างระหว่างการเรียกใช้สคริปต์ และเราต้องการตรวจสอบว่าผู้ใช้ป้อนชื่อบางส่วนเป็นอินพุตหรือไม่ เราต้องเขียนไวยากรณ์นิพจน์ทั่วไปเพื่อแยกชื่อของคุณและพิมพ์ชื่อเดียวกัน
my $userinput="Guru99 Rocks"; if($userinput=~m/.*(Guru99).*/) { print "Found Pattern"; } else { print "unable to find the pattern"; }
Output:
พบรูปแบบ
ที่นี่ เราได้เขียนนิพจน์ทั่วไปเป็น /.*(Guru99).*/.* จับคู่อักขระทั้งหมดในสตริง เอ'.' ในการแข่งขัน Perl regex หมายถึงอักขระใดๆ รวมถึงช่องว่างด้วย
ให้เราดูว่าเราสามารถสร้าง Regex ได้อย่างไร
ลองพิจารณาตัวอย่างสตริงที่ประกอบด้วยคำและตัวเลขหลายตัว และสัญลักษณ์พิเศษ เช่น “สวัสดีทุกคน นี่คือหมายเลขของฉัน: +91-99298373639”;
Regex : /^\w+\s\w+\s\w+\s\w+\s\w+\s\w+\:\+\d+\-\d+/i
พื้นที่คำ พื้นที่คำ พื้นที่คำ พื้นที่คำ พื้นที่คำ พื้นที่คำ อักขระพิเศษ : ช่องว่าง อักขระพิเศษ+ตัวเลข อักขระพิเศษ –ตัวเลข
การแข่งขันเพิร์ล Operaโปร
ตัวดำเนินการจับคู่ใช้เพื่อจับคู่สตริงภายในคำสั่งหรือในตัวแปร
my $var="Hello this is perl"; if($var=~m/perl/) { print "true"; } else { print "False"; }
Output:
จริง
โค้ดขนาดเล็กนี้จะพิมพ์ 'true' เนื่องจากการจับคู่รูปแบบ Perl จะระบุสตริงในตัวแปร โดยทั่วไป Perl จะค้นหาข้อความที่ระบุใน // ตลอดทั้งสตริง แม้ว่าจะพบในที่หนึ่งก็จะแสดง 'true' ออกมา รูปแบบสามารถอยู่ที่ใดก็ได้ในตัวแปร เราสามารถลองแทนที่ =~ ด้วย !~ เพื่อดูความแตกต่างระหว่างตัวดำเนินการทั้งสองนี้
การทดแทนเพิร์ล OperaTor
ตัวดำเนินการนี้ใช้ค้นหาและแทนที่อักขระใดๆ ด้วยค่า null หรืออักขระอื่น
my $a="Hello how are you"; $a=~s/hello/cello/gi; print $a;
Output:
เชลโล่ คุณเป็นยังไงบ้าง
หมายเหตุ: เราสามารถใช้สตริงที่ตรงกับรูปแบบใดก็ได้ตามที่เราได้ใช้ก่อนหน้านี้ในตัวดำเนินการแทนที่นี้เช่นกัน ที่นี่เราใช้ 'gi', g-globally, i-ignore case
การแปลเพิร์ล OperaTor
สิ่งนี้คล้ายกับการแทนที่ แต่ไม่ได้ใช้นิพจน์ทั่วไปของ Perl ใดๆ แต่เราสามารถส่งผ่านค่าหรือคำที่เราต้องการแทนที่ได้โดยตรง
my $a="Hello how are you"; $a=~tr/hello/cello/; print $a;
Output:
สวัสดีคุณวัว
ไฟล์ Perl I/O
Perl ได้รับการออกแบบมาเพื่อจัดการไฟล์และการดำเนินการ I/O อย่างมีประสิทธิภาพ ข้อได้เปรียบหลักของ Perl อยู่ที่การแยกวิเคราะห์ไฟล์และการจัดการไฟล์ มีฟังก์ชันและตัวดำเนินการในตัวมากมายที่ใช้ระหว่างการจัดการไฟล์ใน Perl
โดยทั่วไป การดำเนินการกับไฟล์ที่ดำเนินการด้วย Perl จะทำโดยใช้ FILEHANDLE เราต้องกำหนด FILEHANDLE นี้ในระหว่างการเปิดไฟล์เพื่ออ่านหรือเขียน
ในบทช่วยสอนสคริปต์ Perl นี้ คุณจะได้เรียนรู้-
Perl เปิดไฟล์
เราสามารถเปิดไฟล์โดยใช้ฟังก์ชัน open() ที่มีอยู่ใน Perl
open(FILEHANDLE, "filename or complete path of the file");
ตอนนี้เราได้เปิดไฟล์แล้ว มีคำถามเกิดขึ้น มันมีไว้สำหรับอ่านหรือเขียน?
ไฟล์อ่าน Perl และไฟล์เขียน Perl
Perl มีโหมดบางอย่างซึ่งจำเป็นต้องใช้ในการอ่าน เขียน หรือต่อท้ายไฟล์
Read – open(my $fh,"<filename or complete path of the file"); Write – open(my $fh,">filename or complete path of the file"); Append – open(my $fh,">>filename or complete path of the file");
ตัวอย่างการอ่านไฟล์:
พิจารณาว่าเรามีไฟล์ Perl ชื่อ file.txt และมีข้อความไม่กี่บรรทัด เราจำเป็นต้องเปิดไฟล์นี้และพิมพ์แบบเดียวกัน
open(FH,"<file.txt"); while(<FH>) # Looping the file contents using the FH as a filehandle. { print "$_"; } close FH;
or
open(FH,"<file.txt"); my @content=<FH>; # specifying the input of the array is FH. foreach(@content) { print "$_"; } close FH;
การดำเนินการนี้จะพิมพ์เนื้อหาไฟล์บนหน้าจอเอาต์พุต
ตอนนี้เราจะเขียนโปรแกรมเพื่อสร้างและเขียนข้อมูลลงในไฟล์ Perl
open(FH,">test.txt"); my $var=<>; print FH $var; close FH;
สิ่งนี้จะเขียนอินพุตที่ให้ไว้ระหว่างรันไทม์และสร้างไฟล์ test.txt ซึ่งจะมีอินพุต
วิธีข้างต้นจะพยายามสร้างไฟล์ชื่อ test.txt และเขียนอินพุตลงในไฟล์เสมอ เราจะเขียนแบบเดียวกันเพื่อต่อท้ายไฟล์
open(FH,">>test.txt"); my $var=<>; print FH $var; close FH;
โหมด | Descriptไอออน |
---|---|
< |
อ่าน |
+< |
อ่านเขียน |
> |
สร้าง เขียน และตัดทอน |
+> |
อ่าน เขียน สร้าง และตัดทอน |
>> |
เขียน ต่อท้าย และสร้าง |
- |
อ่าน เขียน ต่อท้าย และสร้าง |
ตอนนี้เรามาดูวิธีการอ่าน เขียน และผนวกไฟล์โดยใช้ตัวอย่างพื้นฐานกัน
เราจะดูตัวอย่างเพิ่มเติมและฟังก์ชันอื่นๆ ที่ช่วยในการทำความเข้าใจเกี่ยวกับไฟล์มากขึ้น
เพิร์ลบอก
วิธีนี้จะส่งคืนตำแหน่งปัจจุบันของ FILEHANDLER เป็นไบต์หากระบุไว้ มิฉะนั้นจะถือว่าบรรทัดสุดท้ายเป็นตำแหน่ง
open(FH, "test.pl"); while(<FH>) { $a=tell FH; print "$a"; }
เพิร์ลแสวงหา
ฟังก์ชัน Seek คล้ายกับการเรียกของระบบ fseek วิธีการนี้ใช้เพื่อวางตำแหน่งตัวชี้ไฟล์ไปยังตำแหน่งเฉพาะโดยการระบุไบต์ตามด้วยจุดเริ่มต้นของตัวชี้ไฟล์หรือจุดสิ้นสุดของตัวชี้ไฟล์
seek FH, bytes, WHENCE;
เมื่อใดคือตำแหน่งของตัวชี้ไฟล์ที่จะเริ่มต้น ศูนย์จะตั้งค่าตั้งแต่ต้นไฟล์
ตัวอย่าง:ให้ input.txt มีข้อมูลบางอย่าง เช่น “สวัสดี นี่คือโลกของฉัน”
open FH, '+<','input.txt'; seek FH, 5, 0; # This will start reading data after 5 bytes. $/ = undef; $out = <FH>; print $out; close FH;
Output:
นี่คือโลกของฉัน
Perl ยกเลิกการเชื่อมโยง
Unlink ใช้เพื่อลบไฟล์
unlink("filename or complete file path");
การจัดการไดเรกทอรี:
นอกจากนี้เรายังสามารถจัดการไดเร็กทอรีที่เราสามารถจัดการไฟล์หลาย ๆ ไฟล์ได้
มาดูวิธีการเปิดไดเร็กทอรีกัน เราสามารถใช้เมธอด opendir และ readdir ได้
opendir(DIR,"C:\\Program Files\\"); #DIR is the directory handler. while(readdir(DIR)) # loop through the output of readdir to print the directory contents. { print "$_\n"; } closedir(DIR); #used to close the directory handler.
or
opendir(DIR,"C:\\Program Files\\"); @content=readdir(DIR); foreach(@content) { print "$_\n"; } closedir(DIR);
นี่จะพิมพ์ไฟล์ทั้งหมดที่มีอยู่ในไดเร็กทอรีนั้น
การทดสอบไฟล์ Perl และความหมาย
-r |
เพื่อตรวจสอบว่าไฟล์/ไดเรกทอรีนั้นสามารถอ่านได้โดยผู้ใช้/กลุ่มปัจจุบันหรือไม่ |
-w |
เพื่อตรวจสอบว่าไฟล์/ไดเร็กทอรีสามารถเขียนได้โดยผู้ใช้/กลุ่มปัจจุบันหรือไม่ |
-x |
เพื่อตรวจสอบว่าไฟล์/ไดเร็กทอรีสามารถเรียกใช้งานได้โดยผู้ใช้/กลุ่มปัจจุบันหรือไม่ |
-o |
เพื่อตรวจสอบว่าไฟล์/ไดเร็กทอรีเป็นของผู้ใช้ปัจจุบันหรือไม่ |
-R |
เพื่อตรวจสอบว่าไฟล์/ไดเรกทอรีนั้นสามารถอ่านได้โดยผู้ใช้/กลุ่มจริงนี้หรือไม่ |
-W |
เพื่อตรวจสอบว่าไฟล์/ไดเร็กทอรีสามารถเขียนได้โดยผู้ใช้/กลุ่มจริงนี้หรือไม่ |
-X |
เพื่อตรวจสอบว่าไฟล์/ไดเร็กทอรีสามารถเรียกใช้งานได้โดยผู้ใช้/กลุ่มจริงนี้หรือไม่ |
-O |
เพื่อตรวจสอบว่าไฟล์/ไดเร็กทอรีเป็นของผู้ใช้จริงรายนี้หรือไม่ |
-e |
เพื่อตรวจสอบว่ามีชื่อไฟล์/ไดเร็กทอรีอยู่หรือไม่ |
-z |
เพื่อตรวจสอบว่ามีไฟล์อยู่และมีขนาดเป็นศูนย์หรือไม่ (เท็จเสมอสำหรับไดเร็กทอรี) |
-f |
เพื่อตรวจสอบว่า Entry เป็นไฟล์ธรรมดาหรือไม่ |
-d |
เพื่อตรวจสอบว่า Entry เป็นไดเร็กทอรีหรือไม่ |
-l |
เพื่อตรวจสอบว่ารายการเป็นลิงค์สัญลักษณ์หรือไม่ |
-S |
เพื่อตรวจสอบว่ารายการเป็นซ็อกเก็ตหรือไม่ |
-p |
เพื่อตรวจสอบว่ารายการเป็นไปป์ที่มีชื่อ (“FIFO”) |
-b |
เพื่อตรวจสอบว่า Entry เป็นไฟล์พิเศษแบบบล็อก (เช่นดิสก์ที่เมาท์ได้) |
-c |
เพื่อตรวจสอบว่า Entry เป็นไฟล์อักขระพิเศษหรือไม่ (เช่น อุปกรณ์ I/O) |
-u |
เพื่อตรวจสอบว่าไฟล์หรือไดเร็กทอรีเป็น setuid หรือไม่ |
-g |
เพื่อตรวจสอบว่าไฟล์หรือไดเร็กทอรีเป็น setgid หรือไม่ |
-k |
เพื่อตรวจสอบว่าไฟล์หรือไดเร็กทอรีมีการตั้งค่าบิตเหนียวหรือไม่ |
-t |
filehandle ที่กำหนดคือ TTY (ตามฟังก์ชันระบบ isatty() ชื่อไฟล์ไม่สามารถทดสอบได้ด้วยการทดสอบนี้) |
-T |
เพื่อตรวจสอบว่าไฟล์ดูเหมือนไฟล์ "ข้อความ" หรือไม่ |
-B |
เพื่อตรวจสอบว่าไฟล์ดูเหมือนไฟล์ "ไบนารี" หรือไม่ |
-M |
เพื่อตรวจสอบอายุการแก้ไข (วัดเป็นวัน) ของไฟล์ |
-A |
เพื่อตรวจสอบอายุการเข้าถึง (วัดเป็นวัน) ของไฟล์ |
-C |
เพื่อตรวจสอบอายุการแก้ไขไอโหนด (วัดเป็นวัน) ของไฟล์ |
รูทีนย่อย Perl
รูทีนย่อยคืออะไร?
รูทีนย่อย คล้ายกับฟังก์ชันในภาษาโปรแกรมอื่นๆ เราได้ใช้ฟังก์ชันในตัวบางอย่างแล้ว เช่น print, chomp, Chop เป็นต้น เราสามารถเขียนรูทีนย่อยของเราเองในภาษา Perl ได้ รูทีนย่อยเหล่านี้สามารถเขียนได้ทุกที่ในโปรแกรม ขอแนะนำให้วางรูทีนย่อยไว้ที่จุดเริ่มต้นหรือจุดสิ้นสุดของโค้ด
ตัวอย่างรูทีนย่อย
sub subroutine_name { Statements…; # this is how typical subroutines look like. }
ตอนนี้เรารู้วิธีการเขียนรูทีนย่อยแล้ว เราจะเข้าถึงมันได้อย่างไร?
เราจำเป็นต้องเข้าถึงหรือเรียกรูทีนย่อยโดยใช้ชื่อรูทีนย่อยที่นำหน้าด้วยสัญลักษณ์ '&'
sub display { print "this is a subroutine"; } display(); # This is how we call a subroutine
การส่งผ่านพารามิเตอร์ Perl และอาร์กิวเมนต์ Perl
รูทีนย่อยหรือฟังก์ชัน Perl ถูกเขียนขึ้นเพื่อวางโค้ดที่นำมาใช้ซ้ำได้ โค้ดที่ใช้ซ้ำได้ส่วนใหญ่ต้องการให้ส่งพารามิเตอร์ไปยังรูทีนย่อย ที่นี่ เราจะเรียนรู้วิธีส่งอาร์กิวเมนต์ไปยังรูทีนย่อยได้อย่างไร
sub display { my $var=@_; # @_ is a special variable which stores the list of arguments passed. print "$var is the value passed"; } display(2,3,4); #this is how we need to pass the arguments.
Output:
3 คือค่าที่ส่งผ่าน
@_ เป็นตัวแปรอาร์เรย์พิเศษที่เก็บอาร์กิวเมนต์ที่ส่งผ่านไปยังรูทีนย่อย
Perl Shift
เราสามารถใช้คีย์เวิร์ด 'shift' ซึ่งเลื่อนพารามิเตอร์ทีละตัวไปยังตัวแปรหรือ $_[0],$_[1]… ซึ่งเป็นองค์ประกอบเดี่ยวของอาร์เรย์ @_
sub display { my $var=shift; print "$var is passed"; } display("hello");
Output:
สวัสดีผ่านไปแล้ว
โดยทั่วไปแล้วรูทีนย่อยจะใช้ในการเขียนโปรแกรมเชิงวัตถุและในตำแหน่งที่คุณอาจวางโค้ดที่นำมาใช้ซ้ำได้มากกว่า
ฟังก์ชันหลักของรูทีนย่อยคือการทำงานบางอย่างและส่งคืนผลลัพธ์ของโค้ดที่นำมาใช้ซ้ำได้
เราสามารถคืนค่าจากรูทีนย่อยโดยใช้คีย์เวิร์ด return
sub add { my $a=shift; my $b=shift; return($a+$b); } my $result=add(5,6); print $result;
Output:
11
$result จะเก็บค่าของ $a และ $b ที่เพิ่มไว้
นอกจากนี้เรายังสามารถส่งแฮชและอาร์เรย์ไปยังรูทีนย่อยได้โดยตรง
sub hash { my %hash=@_; print %hash; } %value= ( 1=>'a', 2=>'b'); &hash(%value);
Output:
1a2b
นอกจากนี้เรายังสามารถคืนแฮชหรืออาร์เรย์ได้อีกด้วย
sub hashArray { my %hash=@_; print "Inside Sub-routine"; print %hash; return(%hash); } %hash=(1=>'a', 2=>'b'); my(@ret)=hashArray(%hash); print "After Sub-routine call"; print @ret;
Output:
ภายในรูทีนย่อย2b1aหลังจากการเรียกรูทีนย่อย2b1a
รูปแบบเพิร์ล
Perl มีกลไกที่เราใช้สร้างรายงานได้ โดยใช้ฟีเจอร์นี้ เราสามารถสร้างรายงานได้ตามต้องการขณะพิมพ์บนหน้าจอผลลัพธ์หรือในไฟล์ รูปแบบที่เรียบง่ายสามารถเขียนได้โดยใช้ฟังก์ชัน printf หรือ sprintf ที่มีอยู่ใน Perl
printf "%05d\n", 30;
ซึ่งจะรวมถึงเลขศูนย์นำหน้าหน้าตัวเลข 30 ทำให้นับตัวเลขทั้งหมดได้เป็น 5 สามารถใช้กับ sprintf ได้เช่นกัน
sprintf "%05d\n", 30; # This will print the same as printf.
เราสามารถใช้ printf และ sprintf เพื่อรับรูปแบบ Perl ส่วนใหญ่ได้ แต่ในกรณีของรายงาน การนำไปใช้งานอาจทำได้ยาก
================================================== =========================
ชื่อ ที่อยู่ อายุ โทรศัพท์
================================================== =========================
Krishna เจนไน 24 929309242
ชรูธี เจนไน 24 929309232
ด้านบนเป็นตัวอย่างรายงานที่เราต้องพิมพ์ในลักษณะเดียวกันใน Perl ซึ่งสามารถทำได้โดยใช้ perl printf และ perl sprintf โดยสามารถนำไปใช้ได้อย่างมีประสิทธิภาพโดยใช้ format
สามารถประกาศรูปแบบได้ในลักษณะด้านล่าง
format FORMATNAME=FORMATLIST.
ที่นี่ เราจะใช้วิธีการเฉพาะในการเขียนเพื่อพิมพ์ข้อมูลลงบนหน้าจอเอาท์พุตหรือลงในไฟล์
สัญลักษณ์ | Descriptไอออน |
---|---|
@ |
ใช้เพื่อแสดงถึงการเริ่มต้นของเจ้าของสนาม |
> |
การจัดตำแหน่งข้อความให้ถูกต้อง |
< |
การจัดข้อความชิดซ้าย |
| |
การจัดตำแหน่งกึ่งกลาง |
# |
ตัวเลขหากระบุ # หลายรายการ ถือว่าเป็นความคิดเห็นหากระบุ # single |
. |
จุดทศนิยม |
^ |
จุดเริ่มต้นของตัวยึดฟิลด์ยังสามารถใช้สำหรับหลายบรรทัดและสำหรับการตัดคำด้วย |
~ |
บรรทัดควรว่างเปล่าหากตัวแปรว่างเปล่า |
@* |
หลายบรรทัด |
($name,$addr,$age,$phone)=("krishna","chennai","24","929309242"); write; ($name,$addr,$age,$phone)=("shruthi","chennai","24","929309232"); write; format STDOUT_TOP= =============================================================== NAME ADDRESS AGE PHONE =============================================================== . format STDOUT= @<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<< $name, $addr, $age, $phone .
รันโค้ดเพื่อดูผลลัพธ์
เรากำลังใช้สัญลักษณ์ @ เพื่อระบุจุดเริ่มต้นของตัวยึดฟิลด์หรือสตริง '<' แต่ละตัว
เรากำลังใช้ STDOUT เพื่อพิมพ์บนเอาต์พุตมาตรฐาน เราสามารถเปลี่ยนสิ่งนี้เป็นตัวจัดการไฟล์ที่เราใช้ในการเขียนข้อมูลลงในไฟล์
open(REPORT,">test.txt"); ($name,$addr,$age,$phone)=("krishna","chennai","24","929309232"); write REPORT; ($name,$addr,$age,$phone)=("shruthi","chennai","24","929309232"); write REPORT; format REPORT_TOP= =============================================================== NAME ADDRESS AGE PHONE =============================================================== . format REPORT= @<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<< $name, $addr, $age, $phone
เราสามารถแทนที่ '<' เป็น '>' หรือ '|' เพื่อเปลี่ยนการจัดแนวของข้อความ STDOUT_TOP ใช้เพื่อออกแบบส่วนหัวของรูปแบบ นอกจากนี้เรายังสามารถใช้แบบเดียวกันกับตัวจัดการไฟล์โดยใช้ FH_TOP (FH เป็นตัวจัดการไฟล์) ซึ่งจะส่งออกรูปแบบไปยังไฟล์ที่เรากำลังทำงานอยู่ บน.
มาตรฐานการเข้ารหัส Perl
โปรแกรมเมอร์แต่ละคนจะมีความรู้สึกในการเขียนโค้ดโดยใช้มาตรฐานเฉพาะของตนเอง มาตรฐานเหล่านี้ควรจะคุ้นเคยเพียงพอที่โปรแกรมเมอร์คนอื่นสามารถเข้าใจและสนับสนุนโค้ดได้อย่างเหมาะสม
มาตรฐานการเข้ารหัสใน Perl
การเขียนโค้ดนั้นง่ายและสะดวก ปัญหาเกิดขึ้นเมื่อจำเป็นต้องบำรุงรักษาในภายหลัง จำเป็นต้องปฏิบัติตามแนวทางและมาตรฐานการเขียนโค้ดที่เหมาะสมขณะเขียนโค้ด Perl ยังกำหนดมาตรฐานบางอย่างที่จะเป็นประโยชน์สำหรับโปรแกรมเมอร์ในการเขียนโค้ด ขอแนะนำให้โหลดโมดูล 'strict' และ 'warnings' ขณะเขียนโค้ด โมดูลเหล่านี้แต่ละโมดูลมีความสำคัญในตัวเอง Strict จะให้เราประกาศตัวแปรก่อนใช้งาน และจะบอกด้วยว่ามีคำเปล่าใดๆ อยู่ในโค้ดของคุณหรือไม่ โมดูล Warnings สามารถใช้ได้โดยส่งตัวเลือก '-w' ไปยังอินเทอร์พรีเตอร์ Perl ใน shebang คำเตือนจะพิมพ์บนหน้าจอเอาต์พุต
#!/usr/bin/perl –w
ด้านล่างนี้คือรายการมาตรฐานบางส่วน
- ใช้โมดูล 'เข้มงวด' และ 'คำเตือน'
- ลบตัวแปรที่ไม่ได้ใช้งานออก
- ผู้ใช้รายอื่นควรเข้าใจชื่อตัวแปรได้ เช่น $name, @fileData เป็นต้น
- จำเป็นต้องมีเอกสารประกอบในขณะที่เขียนโค้ดสคริปต์
- อย่าฮาร์ดโค้ดค่าใดๆ แต่ให้ลองดึงค่าเหล่านั้นแบบไดนามิกหรือขอให้ผู้ใช้ป้อนระหว่างรันไทม์ (เส้นทางของไฟล์ ชื่อไฟล์)
- เพิ่มการใช้โค้ดซ้ำสูงสุด ลองใส่รหัสที่นำมาใช้ซ้ำได้ในรูทีนย่อย
- ความหมายควรให้ชื่อเต็มสำหรับรูทีนย่อย
- รูทีนย่อยจำเป็นต้องเขียนพร้อมข้อคิดเห็นและเอกสารประกอบที่เหมาะสม
- เริ่มต้นตัวแปรเสมอ
- ตรวจสอบรหัสส่งคืนสำหรับการเรียกของระบบเสมอ การเปิดไฟล์อาจเกิดขึ้นหรือไม่ก็ได้ การมีโค้ดส่งคืนที่นี่จะแสดงสถานะข้อผิดพลาดหากไม่มีไฟล์อยู่
ตัวอย่าง: เปิด(FH,
- รูทีนย่อยควรส่งคืนค่าเสมอ
- เปิดลอนเป็นเส้นเดียวกัน
- BLOCK บรรทัดเดียวสามารถวางเป็นบรรทัดเดียวโดยมีเส้นโค้งได้
- ใช้ป้ายกำกับระหว่าง LOOPS ซึ่งจะทำให้ง่ายต่อการออกจากลูปทุกครั้งที่จำเป็น
- ใช้ขีดล่างในขณะที่วลียาวๆ ของคำเขียนเป็นชื่อตัวแปรหรือรูทีนย่อย
- ลองใช้ regex แบบง่ายในขณะที่เขียนโค้ด
ตัวอย่างที่สมบูรณ์แบบด้วยมาตรฐานการเข้ารหัส:
####################################################################### Program to read the file content # Date: 22-2-2013 # Author : Guru99 ######################################################################## #!/usr/bin/perl use strict; use warnings; my $line; open FR, "file.txt" || die("Cannot open the file $!"); while ($line=<FR>) { print $line; } # Looping file handler to print data
การจัดการข้อผิดพลาด Perl
ข้อยกเว้นคืออะไร?
ข้อยกเว้นคือเหตุการณ์ที่เกิดขึ้นระหว่างการทำงานของโปรแกรมซึ่งจะระงับหรือยุติโปรแกรมของคุณ
จัดการข้อผิดพลาด
Error Handling เป็นสิ่งที่โปรแกรมเมอร์ทุกคนต้องดูแลระหว่างการเขียนโปรแกรม Perl ยังมีเทคนิคการจัดการข้อผิดพลาดซึ่งเราสามารถดักจับข้อผิดพลาดและจัดการตามนั้นได้
การจัดการข้อผิดพลาดใน Perl
มีหลายวิธีในการตรวจสอบข้อผิดพลาดในโปรแกรม เราจำเป็นต้องตรวจสอบโค้ดส่งคืนของฟังก์ชันที่เราใช้โค้ด หากเราสามารถจัดการโค้ดส่งคืนเหล่านั้นได้อย่างเหมาะสม การจัดการข้อผิดพลาดส่วนใหญ่ก็สามารถทำได้
อะไรจะกลับมาในกรณีของการเรียกของระบบ?
ในกรณีของการเรียกของระบบ สถานะการส่งคืนจะถูกเก็บไว้ในตัวแปรพิเศษสองตัว $? และ $!
- – สิ่งนี้จะตรวจจับหมายเลขข้อผิดพลาดหรือหมายเลขข้อผิดพลาดที่เกี่ยวข้องกับข้อความแสดงข้อผิดพลาด
- – นี่จะถือเป็นฟังก์ชันระบบสถานะการคืนสินค้า ()
การใช้ตัวดำเนินการ Perl หรือตรรกะ
เราสามารถใช้ตรรกะหรือตัวดำเนินการเพื่อจัดการข้อผิดพลาดขณะใช้การเรียกใช้ระบบได้
Ex:
open(FH,"<test.txt");
นี่จะเป็นการเปิดไฟล์ในโหมดอ่านหากมีไฟล์อยู่
จะทำอย่างไรถ้าไฟล์หายไป?
open(FH,"<test.txt") or die("File not exists $!"); # This will perl exit the program if the file not exists. open(FH,"<test.txt") or warn ("File not exists $!"); # This will print a warning message on STDERR
เพิร์ล เอวาล
ฟังก์ชัน Eval สามารถจัดการกับข้อผิดพลาดร้ายแรง ข้อผิดพลาดด้านเวลาคอมไพล์ ข้อผิดพลาดรันไทม์ และข้อผิดพลาดเหล่านั้นซึ่งทำให้โค้ดของคุณสิ้นสุดลง ณ จุดใดจุดหนึ่ง
ฟังก์ชัน Perl Eval สามารถมีบล็อกของโค้ดหรือนิพจน์ได้ Evals ถือว่าทุกสิ่งที่อยู่ในนั้นเป็นสตริง
พิจารณาสถานการณ์ในการเรียกรูทีนย่อยที่ไม่ได้กำหนดไว้ในสคริปต์ ในสถานการณ์นี้ สคริปต์สิ้นสุดโดยระบุว่า “รูทีนย่อยที่ไม่ได้กำหนด &XYZ ข้อผิดพลาดนี้สามารถจัดการได้ในฟังก์ชัน eval
บล็อก evals มีประโยชน์หลายอย่าง หนึ่งในนั้นคือเมื่อเราต้องการโหลดโมดูลที่เฉพาะเจาะจงกับระบบปฏิบัติการในระหว่างการรันไทม์
ตัวอย่าง: การหารด้วยศูนย์ทำให้เกิดข้อผิดพลาดร้ายแรง เพื่อจัดการสิ่งนี้เราสามารถวางโค้ดไว้ในบล็อก evals
$a=5; $b=0; eval { '$result=$a/$b'; } if($@) { print "$@"; # All the error codes returned by evals will get stored in $@. }
Output:
ข้อผิดพลาดทางไวยากรณ์ที่ C:\Users\XYZ\Text.pl บรรทัด 8 ใกล้ “)
{"
การดำเนินการ C:\Users\XYZ\Text.pl ถูกยกเลิกเนื่องจากข้อผิดพลาดในการรวบรวม
ตัวอย่าง: eval โดยใช้คำสั่ง Perl die
sub test { die "Dieing in sub test \n"; } eval { test(); }; print "Caught : $@\n";
Output:
จับได้ : เสียชีวิตในการทดสอบย่อย
ใช้ Perl ลอง
Perl ไม่สนับสนุน try, catch และสุดท้ายโค้ดบล็อกเหมือนกับภาษาโปรแกรมอื่นๆ เรายังคงสามารถใช้งานได้โดยการโหลดโมดูล Perl ภายนอก
ใช้ลอง::จิ๋ว;
การใช้สิ่งนี้เราสามารถวางโค้ดของคุณใน try block และตรวจจับข้อผิดพลาดในบล็อกเตือน
แทนที่ $@ ที่ใช้ใน eval Try::Tiny ใช้ $_
# จัดการข้อผิดพลาดด้วยตัวจัดการ catch
try { die "Die now"; } catch { warn "caught error: $_"; # not $@ };
ใช้ในที่สุด
my $y; try { die 'foo' } finally { $y = 'bar' }; try { die 'Die now' } catch { warn "Returned from die: $_" } finally { $y = 'gone' };
Output:
foo ที่ C:\Users\XYZ\Text.pl บรรทัดที่ 4
เราสามารถใช้ try, catch และสุดท้ายในลักษณะนี้ได้
ลอง { # คำสั่ง }
จับ {# คำสั่ง }
ในที่สุด { # คำสั่ง };
Or
try { # statement } finally { # statement };
Output:
Or
try { # statement } finally { # statement } catch { # statement };
Output:
การเขียนโปรแกรมซ็อกเก็ต Perl
ซ็อกเก็ตคืออะไร?
ซ็อกเก็ตเป็นสื่อกลางที่คอมพิวเตอร์สองเครื่องสามารถโต้ตอบบนเครือข่ายโดยใช้ที่อยู่เครือข่ายและพอร์ต
สมมติว่า A (เซิร์ฟเวอร์) และ B (ไคลเอนต์) เป็นสองระบบซึ่งต้องโต้ตอบกันโดยใช้ Sockets เพื่อรันบางโปรแกรม
ในการดำเนินการนี้ เราจำเป็นต้องสร้างซ็อกเก็ตทั้งใน A (เซิร์ฟเวอร์) และ B (ไคลเอนต์) A จะอยู่ในสถานะรับ และ B จะอยู่ในสถานะส่ง
เอ (เซิร์ฟเวอร์):
ที่นี่ เซิร์ฟเวอร์ต้องการรับการเชื่อมต่อจาก B (ไคลเอนต์) และดำเนินการงานบางอย่างและส่งผลลัพธ์กลับไปยัง B (ไคลเอนต์) เมื่อเราดำเนินการโค้ด ระบบปฏิบัติการใน A จะพยายามสร้างซ็อกเก็ตและเชื่อมโยงพอร์ตหนึ่งเข้ากับซ็อกเก็ตนั้น จากนั้นจะรับฟังจากผู้ส่งซึ่งก็คือ B
บี (ลูกค้า)
ที่นี่ ไคลเอนต์ต้องการส่งโปรแกรมบางอย่างจากระบบของเขาไปยัง A (เซิร์ฟเวอร์) เพื่อประมวลผล เมื่อเรารันโค้ด ระบบปฏิบัติการใน B จะพยายามสร้างซ็อกเก็ตสำหรับการสื่อสารกับ A (เซิร์ฟเวอร์) โดย B จะต้องระบุที่อยู่ IP และหมายเลขพอร์ตของ A ที่ B ต้องการเชื่อมต่อด้วย
หากเป็นไปด้วยดี ทั้งสองระบบจะโต้ตอบเพื่อแลกเปลี่ยนข้อมูลผ่านพอร์ตเดียว Perl ยังรองรับการเขียนโปรแกรมซ็อกเก็ตด้วย
Perl มี Native API ซึ่งสามารถใช้งานซ็อกเก็ตได้ เพื่อให้ง่าย มีโมดูล CPAN จำนวนมากที่ใช้เขียนโปรแกรมซ็อกเก็ต
การทำงานของเซิร์ฟเวอร์:
- สร้างซ็อกเก็ต
- ผูกซ็อกเก็ตพร้อมที่อยู่และพอร์ต
- ฟังซ็อกเก็ตที่อยู่พอร์ตนั้น
- ยอมรับการเชื่อมต่อไคลเอ็นต์ที่พยายามเชื่อมต่อโดยใช้พอร์ตและ IP ของเซิร์ฟเวอร์
- ดำเนินการ
ไคลเอนต์ Operaชั่น:
- สร้างซ็อกเก็ต
- เชื่อมต่อกับเซิร์ฟเวอร์โดยใช้ที่อยู่พอร์ต
- ดำเนินการ
socket.io
นี่คือหนึ่งโมดูลสำหรับการเขียนโปรแกรมซ็อกเก็ตซึ่งอิงตามการเขียนโปรแกรมเชิงวัตถุ โมดูลนี้ไม่รองรับประเภทเครือข่าย INET ที่ใช้ในเครือข่าย
IO::ซ็อกเก็ต::INET:
โมดูลนี้รองรับโดเมน INET และสร้างขึ้นบน IO::Sockets วิธีการทั้งหมดที่มีอยู่ใน IO::Sockets สืบทอดมาจากโมดูล INET
ไคลเอนต์และเซิร์ฟเวอร์ที่ใช้โปรโตคอล TCP:
TCP เป็นโปรโตคอลเชิงการเชื่อมต่อ เราจะใช้โปรโตคอลนี้สำหรับการเขียนโปรแกรมซ็อกเก็ต
ก่อนดำเนินการต่อ เรามาดูกันว่าเราจะสร้างอ็อบเจ็กต์สำหรับโมดูล IO::Socket::INET และสร้างซ็อกเก็ตได้อย่างไร
$socket = IO::Socket::INET->new(PeerPort => 45787, PeerAddr => inet_ntoa(INADDR_BROADCAST), Proto => udp,LocalAddr => 'localhost',Broadcast => 1 ) or die "Can't create socket and bind it : $@n";
วิธีการใหม่ในโมดูล IO::Socket::INET ยอมรับแฮชเป็นพารามิเตอร์อินพุตไปยังรูทีนย่อย แฮชนี้ถูกกำหนดไว้ล่วงหน้าแล้ว และเราเพียงแค่ต้องระบุค่าให้กับคีย์ที่เราต้องการใช้ มีรายการคีย์ที่ใช้โดยแฮชนี้
PeerAddr |
ที่อยู่โฮสต์ระยะไกล |
เพียร์โฮสต์ |
คำพ้องความหมายสำหรับ PeerAddr |
เพียร์พอร์ต |
พอร์ตหรือบริการระยะไกล |
LocalAddr |
ที่อยู่การเชื่อมโยงโฮสต์ภายในเครื่อง |
localhost |
คำพ้องความหมายสำหรับ LocalAddr |
พอร์ตท้องถิ่น |
พอร์ตผูกโฮสต์ท้องถิ่น |
โปรโต |
ชื่อโปรโตคอล (หรือหมายเลข) |
ประเภท |
ประเภทซ็อกเก็ต |
ฟัง |
ขนาดคิวสำหรับการฟัง |
ใช้ซ้ำAddr |
ตั้งค่า SO_REUSEADDR ก่อนที่จะรวม |
นำมาใช้ใหม่ |
ตั้งค่า SO_REUSEADDR ก่อนที่จะรวม |
ReusePort |
ตั้งค่า SO_REUSEPORT ก่อนการเชื่อมโยง |
บรอดแคสต์ |
ตั้งค่า SO_BROADCAST ก่อนการเชื่อมโยง |
การหยุดพักชั่วคราว |
ค่าการหมดเวลาสำหรับการดำเนินการต่างๆ |
มัลติโฮม |
ลองใช้ที่อยู่ทั้งหมดสำหรับโฮสต์แบบ multihomed |
การปิดกั้น |
ตรวจสอบว่าการเชื่อมต่อจะเป็นโหมดบล็อกหรือไม่ |
เซิร์ฟเวอร์.pl
use IO::Socket; use strict; use warnings; my $socket = new IO::Socket::INET ( LocalHost => 'localhost', LocalPort => '45655', Proto => 'tcp', Listen => 1, Reuse => 1, ); die "Could not create socket: $!n" unless $socket; print "Waiting for the client to send datan"; my $new_socket = $socket->accept(); while(<$new_socket>) { print $_; } close($socket);
ลูกค้า.pl
use strict; use warnings; use IO::Socket; my $socket = new IO::Socket::INET ( PeerAddr => 'localhost', PeerPort => '45655', Proto => 'tcp', ); die "Could not create socket: $!n" unless $socket; print $socket "Hello this is socket connection!n"; close($socket);
หมายเหตุ
ในการเขียนโปรแกรมซ็อกเก็ต เราจะต้องรัน Server.pl ก่อน จากนั้นจึง client.pl ทีละรายการใน command prompts ที่แตกต่างกัน หากเราทำงานบนโลคัลโฮสต์
โมดูลและแพ็คเกจ Perl คืออะไร
โมดูลและแพ็คเกจมีความสัมพันธ์กันอย่างใกล้ชิดและเป็นอิสระจากกัน แพ็คเกจ: แพ็คเกจ Perl เรียกอีกอย่างว่าเนมสเปซซึ่งมีตัวแปรเฉพาะทั้งหมดที่ใช้ เช่น แฮช อาร์เรย์ สเกลาร์ และรูทีนย่อย โมดูล: โมดูลคือชุดของโค้ดที่นำมาใช้ซ้ำได้ โดยที่เราเขียนรูทีนย่อยลงไป โมดูลเหล่านี้สามารถโหลดได้ในโปรแกรม Perl เพื่อใช้ประโยชน์จากรูทีนย่อยที่เขียนในโมดูลเหล่านั้น
โมดูล Perl คืออะไร?
โมดูลมาตรฐานจะได้รับการติดตั้งระหว่างการติดตั้ง Perl บนระบบใดๆ CPAN: Perl ที่ครอบคลุม Archive Network – พื้นที่เก็บข้อมูลส่วนกลางของโมดูล Perl โมดูล Perl ที่เรากำหนดเองซึ่งเราสามารถเขียนเองได้ โดยพื้นฐานแล้ว โมดูลเมื่อโหลดในสคริปต์ใดๆ จะส่งออกตัวแปรโกลบอลและรูทีนย่อยทั้งหมด รูทีนย่อยเหล่านี้สามารถเรียกได้โดยตรงราวกับว่ามีการประกาศในสคริปต์เอง โมดูล Perl สามารถเขียนนามสกุลไฟล์ .pm ได้ เช่น Foo.pm สามารถเขียนโมดูลได้โดยใช้ 'package Foo' ที่จุดเริ่มต้นของโปรแกรม
โมดูล Perl พื้นฐาน:
#!/usr/bin/perl package Arithmetic; sub add { my $a=$_[0]; my $b=$_[1]; return ($a+$b); } sub subtract { my $a=$_[0]; my $b=$_[1]; return ($a-$b); } 1;
ไม่มีเอาท์พุท
หากต้องการใช้โมดูล Perl นี้ เราต้องวางไว้ในไดเร็กทอรีที่ทำงานอยู่ในปัจจุบัน
เราสามารถโหลดโมดูล Perl โดยใช้คำสั่งหรือใช้ที่ใดก็ได้ในโค้ด ความแตกต่างที่สำคัญระหว่างความต้องการและการใช้งานคือ ต้องมีโมดูลที่โหลดระหว่างรันไทม์ และใช้โหลดในช่วงเวลาคอมไพล์
#!/usr/bin/perl require Arithmetic; print Arithmetic::add(5,6); print Arithmetic:: subtract (5,6);
ในตัวอย่างข้างต้น เรากำลังเข้าถึงรูทีนย่อยโดยใช้ชื่อโมดูลแบบเต็ม
เรายังสามารถเข้าถึงแพ็คเกจได้โดยใช้ 'use Arithmetic'
ส่งออก:
โมดูลนี้มีฟังก์ชันเริ่มต้นของวิธีการนำเข้า
#!/usr/bin/perl package Arithmetic; require Exporter; @ISA= qw(Exporter); # This is basically for implementing inheritance. @EXPORT = qw(add); @EXPORT_OK = qw(subtract); sub add { my $a=$_[0]; my $b=$_[1]; return ($a+$b); } sub subtract { my $a=$_[0]; my $b=$_[1]; return ($a-$b); } 1;
อาร์เรย์ @EXPORT สามารถใช้เพื่อส่งรายการตัวแปรและรูทีนย่อยซึ่งโดยค่าเริ่มต้นจะถูกส่งออกไปยังผู้เรียกของโมดูล
อาร์เรย์ @EXPORT_OK สามารถใช้เพื่อส่งผ่านรายการตัวแปรและรูทีนย่อยซึ่งจะถูกส่งออกตามความต้องการ โดยที่ผู้ใช้จะต้องระบุขณะโหลดโมดูล
#!/usr/bin/perl use Arithmetic qw(subtract); print add(5,6); print subtract (5,6);
ตามค่าเริ่มต้น รูทีนย่อยการเพิ่มจะถูกส่งออก วิธีการลบจะไม่ถูกส่งออกหากไม่มีการระบุขณะโหลดโมดูล
การเขียนโปรแกรมเชิงวัตถุในภาษา Perl
ในส่วนนี้ เราจะเรียนรู้วิธีสร้างโมดูลเชิงวัตถุ Perl ก่อนอื่นเรามาดูกันว่าวัตถุคืออะไร? ออบเจ็กต์คืออินสแตนซ์ที่เราสามารถเข้าถึง แก้ไข และค้นหาข้อมูลบางอย่างในโมดูล Perl ใดก็ได้ นี่ไม่ใช่อะไรนอกจากการสร้างแพ็คเกจ Perl ตัวแปร และรูทีนย่อยที่มีอยู่ให้ทำหน้าที่เหมือนคลาส อ็อบเจ็กต์ และเมธอดโดยอ้างอิงถึงภาษาการเขียนโปรแกรมอื่นๆ
สร้างชั้นเรียน
เรารู้วิธีสร้างโมดูลจากหัวข้อที่แล้วแล้ว วัตถุประสงค์ของคลาสคือเพื่อจัดเก็บวิธีการและตัวแปร โมดูล Perl จะมีรูทีนย่อยซึ่งเป็นวิธีการ เราจำเป็นต้องเข้าถึงตัวแปรและวัตถุรูทีนย่อยเหล่านั้น
ตัวสร้าง Perl
Constructor ใน Perl เป็นวิธีการที่จะรันและส่งคืนการอ้างอิงพร้อมกับชื่อโมดูลที่ติดแท็กไปยังการอ้างอิง นี้เรียกว่าเป็นพรแก่ชั้นเรียน เราใช้ตัวแปรเฉพาะสำหรับการอวยพรคลาส Perl ซึ่งก็คือพร
#!/usr/bin/perl package Arithmetic; sub new { my $class=shift; my $self={}; bless $self, $class; return $self; } sub add { my $self= shift; my $a=$_[0]; my $b=$_[1]; return ($a+$b); } sub subtract { my $self= shift; my $a=$_[0]; my $b=$_[1]; return ($a-$b); } 1;
วิธีการใหม่ที่ใช้เป็นคอนสตรัคเตอร์สำหรับคลาส ตัวสร้างนี้จะสร้างอ็อบเจ็กต์ให้เราและจะกลับไปที่สคริปต์ที่เรียกคอนสตรัคเตอร์นี้
#!/usr/bin/perl use Arithmetic; my $obj= Arithmetic->new(); my $result= $obj->add(5,6); print "$result"; $result = $obj->subtract(6,5); print "$result";
ที่นี่เราต้องเข้าใจว่าวัตถุถูกสร้างขึ้นอย่างไร เมื่อใดก็ตามที่เราพยายามที่จะสร้างวัตถุสำหรับชั้นเรียน เราจำเป็นต้องใช้ชื่อเต็มของชั้นเรียน สมมติว่า ถ้าคลาส Perl อยู่ใน lib\Math\Arithmetic.pm และหากเราต้องการเข้าถึงคลาส Perl นี้จากไดเร็กทอรี lib เราจะต้องระบุเส้นทางทั้งหมดของคลาสไปยังคลาสขณะเรียกใช้สคริปต์
ใช้ lib::คณิตศาสตร์::เลขคณิต;
my $obj = lib::Math::Arithmetic->new();
นี่คือวิธีที่การสร้างวัตถุใน Perl เกิดขึ้น
@ไอเอ็นซี:
สคริปต์ Perl รู้ได้อย่างไรว่าโมดูลไลบรารีอยู่ที่ไหน Perl รู้เฉพาะไดเร็กทอรีปัจจุบันของสคริปต์และเส้นทางไลบรารี inbuilt ของ Perl เมื่อใดก็ตามที่เราใช้และโมดูล Perl ซึ่งไม่ได้อยู่ในไดเร็กทอรีปัจจุบันหรือเส้นทางไลบรารี Perl สคริปต์จะล้มเหลวเสมอ เกี่ยวกับ @INC นี่คืออาร์เรย์ซึ่งเก็บเส้นทางไดเร็กทอรีทั้งหมดที่ต้องค้นหาโมดูล Perl ลองรันคำสั่งนี้แล้วดูว่าผลลัพธ์จะเป็นอย่างไร
perl –e "print @INC"
สิ่งนี้จะให้ผลลัพธ์บางส่วน และนั่นคือเส้นทางที่โมดูล lib จะพร้อมใช้งาน เมื่อใดก็ตามที่เราใช้โมดูลไลบรารีใหม่ เราต้องบอก Perl ซึ่งเป็นล่ามให้ตรวจดูตำแหน่งเฉพาะที่โมดูล Perl พร้อมใช้งาน
push(@INC, "PATH TO YOUR MODULE");
ทำให้นี่เป็นโค้ดบรรทัดแรกของคุณ นี่จะเป็นการบอกให้ล่ามของคุณตรวจดูเส้นทางนั้น หรือ ใช้
lib Arithmetic; # List here is your Perl Module location
โปรแกรมทำลายล้าง Perl
ตัวทำลายวัตถุจะถูกเรียกตามค่าเริ่มต้นที่ส่วนท้ายและก่อนที่สคริปต์ของคุณจะออก ใช้เพื่อทำลายวัตถุของคุณจากหน่วยความจำ
การเขียนสคริปต์เชลล์ PERL V/s
- การเขียนโปรแกรมใน Perl ไม่ก่อให้เกิดปัญหาในการพกพา ซึ่งเป็นเรื่องปกติเมื่อใช้เชลล์ที่แตกต่างกันในการเขียนสคริปต์เชลล์
- การจัดการข้อผิดพลาดนั้นง่ายมากในภาษา Perl
- คุณสามารถเขียนโปรแกรมที่ยาวและซับซ้อนบน Perl ได้อย่างง่ายดายเนื่องจาก Perl มีขอบเขตที่กว้างขวาง ซึ่งต่างจาก Shell ที่ไม่รองรับเนมสเปซ โมดูล อ็อบเจ็กต์ การสืบทอด ฯลฯ
- เชลล์มีไลบรารีที่ใช้ซ้ำได้น้อยลง ไม่มีอะไรเทียบได้กับ CPAN ของ Perl
- เชลล์มีความปลอดภัยน้อยกว่า เป็นการเรียกฟังก์ชันภายนอก (คำสั่งเช่น mv, cp ฯลฯ ขึ้นอยู่กับเชลล์ที่ใช้งาน) ในทางตรงกันข้าม Perl จะทำงานที่มีประโยชน์ในขณะที่ใช้ฟังก์ชันภายใน
วิธีใช้ PERL ในการทดสอบระบบอัตโนมัติ
Perl ถูกนำมาใช้กันอย่างแพร่หลายในระบบอัตโนมัติ อาจไม่ใช่ภาษาโปรแกรมที่ดีที่สุดในโลกแต่เหมาะที่สุดสำหรับงานบางประเภท เรามาพูดคุยกันว่า Perl ใช้ที่ไหนและทำไม การทดสอบอัตโนมัติ
การทดสอบการจัดเก็บ
พื้นที่เก็บข้อมูลคืออะไร? ข้อมูลที่จัดเก็บไว้ในไฟล์
สมมติว่าเรามีการจัดเก็บที่เกี่ยวข้อง กรณีทดสอบ โดยที่เราต้องเขียนข้อมูลลงบนพาร์ติชั่นเดียว อ่านมัน & ตรวจสอบว่าข้อมูลเขียนถูกต้องหรือไม่
ซึ่งสามารถทำได้ด้วยตนเอง แต่ผู้ทดสอบด้วยตนเองสามารถดำเนินการเหมือนเดิม 10000 ครั้งได้หรือไม่ มันจะเป็นฝันร้าย! เราต้องการระบบอัตโนมัติ
เครื่องมือที่ดีที่สุดในการทำให้สิ่งที่เกี่ยวข้องกับการจัดเก็บเป็นแบบอัตโนมัติคือ Perl เนื่องจากมีเทคนิคการจัดการไฟล์ REGEX และการแยกวิเคราะห์ไฟล์ที่มีประสิทธิภาพซึ่งใช้เวลาดำเนินการน้อยที่สุดเมื่อเทียบกับภาษาโปรแกรมอื่นๆ
ทำไมเราต้องทดสอบการจัดเก็บข้อมูล? ลองนึกถึงศูนย์ข้อมูลขนาดใหญ่ที่ข้อมูลจะไหลอย่างต่อเนื่องจากระบบหนึ่งไปยังอีกระบบหนึ่ง โดยมีการจัดเก็บข้อมูลจำนวนหลายพันรายการต่อวินาที การทดสอบความทนทานของกลไกการจัดเก็บข้อมูลดังกล่าวถือเป็นสิ่งสำคัญ
หลายบริษัทเช่น HP, Dell, IBM และผู้ผลิตเซิร์ฟเวอร์จำนวนมากใช้ Perl เป็นส่วนต่อประสานเพื่อทดสอบการทำงานในโดเมนการจัดเก็บข้อมูลและเครือข่าย NetApp เป็นหนึ่งในบริษัทที่ทำงานด้าน Storage อย่างสมบูรณ์ และใช้ Perl เป็นภาษาการเขียนโปรแกรมเพื่อทำให้กรณีทดสอบเป็นแบบอัตโนมัติ
หากคุณสนใจ Perl Automation ขอแนะนำให้เรียนรู้เกี่ยวกับ Storage & Networking Concepts.
การทดสอบเซิร์ฟเวอร์และเครือข่าย:
การทดสอบเซิร์ฟเวอร์และเครือข่ายโดยใช้ Perl
PERL ใช้กันอย่างแพร่หลายในด้านสถานะการออนไลน์ของเซิร์ฟเวอร์และการตรวจสอบประสิทธิภาพ
พิจารณาศูนย์ข้อมูลที่มี 100 โฮสต์ (เซิร์ฟเวอร์) คุณจะต้องเชื่อมต่อกับแต่ละโฮสต์ รันคำสั่งบางคำสั่งจากระยะไกล คุณยังต้องการรีบูทระบบและตรวจสอบว่าระบบกลับมาออนไลน์อีกครั้งเมื่อใด
การดำเนินการนี้ด้วยตนเองกับโฮสต์ทั้ง 100 แห่งจะเป็นฝันร้าย แต่เราสามารถทำให้สิ่งนี้เป็นอัตโนมัติได้อย่างง่ายดายโดยใช้ PERL
ออกแบบขั้นตอนเพื่อให้บรรลุถึงระบบอัตโนมัติข้างต้นโดยใช้ PERL
- รับอินพุตจากไฟล์เกี่ยวกับข้อมูลโฮสต์ เช่น (IP, ชื่อผู้ใช้ และรหัสผ่าน)
- ใช้ Net::SSH2 เพื่อเชื่อมต่อกับแต่ละระบบและสร้างช่องสัญญาณเพื่อดำเนินการคำสั่ง
- ดำเนินการชุดคำสั่งที่จำเป็น เช่น ls, dir, ifconfig,ps เป็นต้น
- รีบูตระบบ
- รอประมาณ 10 นาทีเพื่อให้ระบบขึ้นมา
- Ping ระบบโดยใช้โมดูล Net::Ping และพิมพ์สถานะ
เราจะเขียนโค้ดสถานการณ์ข้างต้น
ลองใช้ไฟล์ชื่อ Input.txt ซึ่งจะเก็บข้อมูลทั้งหมดเกี่ยวกับโฮสต์ทั้งหมดที่เราต้องเชื่อมต่อและดำเนินการคำสั่ง
อินพุต.txt
รหัสผ่านรูท 192.168.1.2
รหัสผ่านรูท 192.168.1.3
192.168.1.4 รูท root123
HostCheck.pl
use Net::SSH2; use Net::Ping; use strict; use warnings; my $ping = Net::Ping->new(); # Creating object for Net::Ping my $SSHObj = Net::SSH2->new(); #Creating object for Net::SSH2 open( FH, "Input.txt" ); # Opening file and placing content to FH my @hosts = <FH>; my $ip; my @ips; foreach (@hosts) { if ( $_ =~ /(.*)\s+(\w+)\s+(.*)/ ) #Regex to get each info from file { $ip = $1; my $user = $2; my $password = $3; $SSHObj->connect($ip); print "Connecting to host -- $ip --Uname:$user --Password:$password\n"; my $status = $SSHObj->auth_password( $user, $password ); print "$status\n"; die("unable to establish connection to -- $ip") unless ($status); my $shell = $SSHObj->channel(); print "$_\n" while <$shell>; $shell->blocking(1); $shell->pty('tty'); $shell->shell(); sleep(5); #Executing the list of command on particular host. Can be any command print $shell "ls \n"; print "$_\n" while <$shell>; print $shell "ps \n"; print "$_\n" while <$shell>; print $shell "dir \n"; print "$_\n" while <$shell>; print $shell "init 6\n"; #rebooting the system push( @ips, $ip ); } } sleep 600; foreach (@ips) { if ( $ping->ping($_) ) { print "$_ is alive.\n" if $ping->ping($_); } else { print "$_ is not still up --waiting for it to come up\n"; } }
การทดสอบเว็บ
Perl ไม่ได้จำกัดเฉพาะการทดสอบพื้นที่เก็บข้อมูลและเครือข่ายเท่านั้น นอกจากนี้เรายังสามารถทำการทดสอบบนเว็บโดยใช้ PERL ได้อีกด้วย WWW-เครื่องจักร เป็นโมดูลหนึ่งที่ใช้สำหรับ การทดสอบเว็บ- โดยพื้นฐานแล้ว มันจะไม่เปิดเบราว์เซอร์ใดๆ เพื่อทดสอบการทำงานของเว็บแอปพลิเคชัน แต่จะใช้ซอร์สโค้ดของหน้า html
นอกจากนี้เรายังสามารถทำการทดสอบบนเบราว์เซอร์โดยใช้ Selenium IDE, RC, ไดรเวอร์เว็บ รองรับ Perl Selenium.
\n”; #this จะเก็บสตริงที่เหลือหลังจากการจับคู่รูปแบบเสร็จสิ้น
พิมพ์ “