Latest web development tutorials

จัดการข้อผิดพลาด 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