จัดการข้อผิดพลาด Perl
โปรแกรมทำงานมักจะพบกับความหลากหลายของข้อผิดพลาดเช่นการเปิดไฟล์ที่ไม่มีอยู่จริง
โปรแกรมทำงานจะหยุดถ้ามีข้อผิดพลาดเกิดขึ้นเราต้องใช้วิธีการบางอย่างเพื่อหลีกเลี่ยงการตรวจสอบข้อผิดพลาดจึงป้องกันการออกจากโปรแกรม
Perl มีข้อผิดพลาดในการประมวลผลแบบ multi-ทำในวิธีการนั้นเราแนะนำหนึ่งโดยหนึ่ง
ถ้ามีคำสั่ง
ถ้าคำสั่งที่สามารถกำหนดค่าตอบแทนของคำสั่งตัวอย่างดังต่อไปนี้:
if(open(DATA, $file)){ ... }else{ die "Error: 无法打开文件 - $!"; }
โปรแกรมตัวแปร $! ส่งคืนข้อความแสดงข้อผิดพลาด นอกจากนี้เรายังสามารถลดความซับซ้อนโค้ดข้างต้นรหัสต่อไปนี้:
open(DATA, $file) || die "Error: 无法打开文件 - $!";
เว้นแต่ฟังก์ชั่น
เว้นแต่ฟังก์ชั่นและถ้าตรงกันข้ามเฉพาะเมื่อการแสดงออกกลับเท็จจะดำเนินการดังต่อไปนี้:
unless(chdir("/etc")){ die "Error: 无法打开目录 - $!"; }
เว้นแต่คำสั่งเมื่อคุณต้องการที่จะตั้งข้อผิดพลาดการแจ้งเตือนเป็นประโยชน์อย่างมากสิ่งที่ฉันยังสามารถย่อเป็นรหัสข้างต้น:
die "Error: 无法打开目录!: $!" unless(chdir("/etc"));
ข้อความผิดพลาดดังกล่าวก็ต่อเมื่อสถานการณ์จะเปลี่ยนออกข้อผิดพลาดไดเรกทอรี
ประกอบ ternary
ต่อไปนี้เป็นตัวอย่างที่เรียบง่ายของผู้ประกอบการที่ประกอบไปด้วย:
print(exists($hash{value}) ? '存在' : '不存在',"\n");
ตัวอย่างข้างต้นเราจะใช้ประกอบ ternary ในการกำหนดค่าแฮชที่มีอยู่
ตัวอย่างรวมถึงการแสดงออกของทั้งสองค่านิยมรูปแบบคือ :? ค่าของนิพจน์ A: ราคาครั้งที่สอง
ฟังก์ชั่นเตือน
ฟังก์ชั่นเตือนจะใช้ในการเรียกข้อความแจ้งเตือนไม่มีการดำเนินการอื่น ๆ ออกไป STDERR (ไฟล์ที่ส่งออกมาตรฐาน) มักจะใช้ในการแจ้งให้ผู้ใช้:
chdir('/etc') or warn "无法切换目录";
ฟังก์ชั่นตาย
ตายฟังก์ชั่นคล้ายกับเตือน แต่มันจะเป็นทางออก มักจะมีข้อผิดพลาดเอาท์พุทเสียงดัง:
chdir('/etc') or die "无法切换目录";
โมดูลปลาคาร์พ
ในสคริปต์ Perl วิธีการที่ใช้กันทั่วไปคือการใช้รายงานข้อผิดพลาดเตือน () หรือตาย () ฟังก์ชั่นในการสร้างรายงานหรือข้อผิดพลาด สำหรับโมดูลปลาคาร์พซึ่งสามารถสร้างข้อความให้มีระดับที่เพิ่มขึ้นของการควบคุมโดยเฉพาะอย่างยิ่งภายในโมดูล
โมดูลปลาคาร์พมาตรฐานให้เตือน () และตาย () ฟังก์ชั่นเป็นทางเลือกที่จะให้ข้อมูลเพิ่มเติมในการจัดหาของการวางตำแหน่งที่ไม่ถูกต้องและเป็นมิตรมากขึ้น เมื่อนำมาใช้ในโมดูลเกิดข้อผิดพลาดมีชื่อโมดูลและหมายเลขบรรทัด
ฟังก์ชั่นปลาคาร์พ
ฟังก์ชั่นการส่งออกปลาคาร์พสามารถติดตามข้อมูลเกี่ยวกับโปรแกรมคล้ายกับเตือนทำงานตามปกติจะส่งข้อมูลไปยัง STDERR:
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp; sub function { carp "Error in module!"; } 1;
ในสคริปต์เรียกขั้นตอนต่อไปนี้:
use T; function();
โปรแกรมข้างต้นผลลัพธ์คือ:
Error in module! at test.pl line 4
ฟังก์ชั่นกุ๊ก
กุ๊ก () และเตือน () เป็นที่คล้ายกันให้เกิดข้อผิดพลาดที่สแต็คกลับร่องรอย
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp qw(cluck); sub function { cluck "Error in module!"; } 1;
ในสคริปต์เรียกขั้นตอนต่อไปนี้:
use T; function();
โปรแกรมข้างต้นผลลัพธ์คือ:
Error in module! at T.pm line 9 T::function() called at test.pl line 4
ฟังก์ชั่นบ่น
บ่น () และตาย () เช่นสามารถจบสคริปต์
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp; sub function { croak "Error in module!"; } 1;
ในสคริปต์เรียกขั้นตอนต่อไปนี้:
use T; function();
โปรแกรมข้างต้นผลลัพธ์คือ:
Error in module! at test.pl line 4
ฟังก์ชั่นสารภาพ
สารภาพ () และตาย () จะคล้ายกัน แต่มีข้อผิดพลาดจากการตรวจสอบย้อนกลับสแต็ค
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp; sub function { confess "Error in module!"; } 1;
ในสคริปต์เรียกขั้นตอนต่อไปนี้:
use T; function();
โปรแกรมข้างต้นผลลัพธ์คือ:
Error in module! at T.pm line 9 T::function() called at test.pl line 4