Pengendalian ralat Perl
Apabila program berjalan, anda akan sentiasa menghadapi pelbagai ralat, seperti membuka fail yang tidak wujud.
Jika ralat berlaku semasa menjalankan program, ia akan berhenti. Kita perlu menggunakan beberapa kaedah pengesanan untuk mengelakkan ralat dan menghalang program daripada keluar.
Perl menyediakan berbilang kaedah untuk mengendalikan ralat, dan kami akan memperkenalkannya satu demi satu seterusnya.
jika penyataan
jika penyataan boleh menentukan nilai pulangan penyataan tersebut contohnya:
if(open(DATA, $file)){ ... }else{ die "Error: 无法打开文件 - $!"; }
Pembolehubah $ ! dalam program mengembalikan maklumat ralat. Kami juga boleh memudahkan kod di atas kepada kod berikut:
open(DATA, $file) || die "Error: 无法打开文件 - $!";
melainkan fungsi
melainkan Fungsi adalah bertentangan dengan if, ia hanya mengembalikan false apabila ungkapan Dilaksanakan seperti berikut:
unless(chdir("/etc")){ die "Error: 无法打开目录 - $!"; }
melainkan pernyataan sangat berguna apabila anda ingin menetapkan peringatan ralat. Kita juga boleh menyingkatkan kod di atas sebagai:
die "Error: 无法打开目录!: $!" unless(chdir("/etc"));
Mesej ralat di atas hanya akan dikeluarkan apabila terdapat ralat dalam penukaran direktori.
Pengendali ternary
Berikut ialah contoh mudah operator ternary:
print(exists($hash{value}) ? '存在' : '不存在',"\n");
Dalam contoh di atas, kami menggunakan operator ternary untuk menentukan cincang sama ada nilai itu wujud. Contoh
mengandungi ungkapan dengan dua nilai, formatnya ialah: Ungkapan ? Nilai satu: Nilai dua .
fungsi amaran
fungsi amaran digunakan untuk mencetuskan mesej amaran Tidak akan ada operasi lain Ia adalah output kepada STDERR (fail output standard). gesa pengguna:
chdir('/etc') or warn "无法切换目录";
fungsi mati
fungsi mati adalah serupa dengan amaran, tetapi ia akan melaksanakan keluar. Output mesej ralat yang biasa digunakan:
chdir('/etc') or die "无法切换目录";
Modul Carp
Dalam skrip Perl, cara biasa untuk melaporkan ralat ialah menggunakan fungsi warn() atau die() untuk melaporkan atau menjana kesilapan. Dalam kes modul Carp, ia menyediakan tahap kawalan tambahan ke atas mesej yang dihasilkan, terutamanya dalam modul.
Modul Carp standard menyediakan alternatif kepada fungsi warn() dan die() yang lebih bermaklumat dan mesra dalam menyediakan lokasi ralat. Apabila digunakan dalam modul, nama modul dan nombor baris disertakan dalam mesej ralat.
Fungsi karp
Fungsi karp boleh mengeluarkan maklumat penjejakan program, serupa dengan fungsi amaran, dan biasanya menghantar maklumat kepada STDERR:
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp; sub function { carp "Error in module!"; } 1;
Panggil yang berikut atur cara dalam skrip:
use T; function();
melaksanakan atur cara di atas, dan hasil output ialah:
Error in module! at test.pl line 4
fungsi cluck
cluck() adalah serupa dengan warn(), menyediakan susun jejak balik dari tempat ralat berlaku.
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp qw(cluck); sub function { cluck "Error in module!"; } 1;
Panggil atur cara berikut dalam skrip:
use T; function();
Laksanakan atur cara di atas, hasil output ialah:
Error in module! at T.pm line 9 T::function() called at test.pl line 4
fungsi croak
croak() dan die() Begitu juga, anda boleh menamatkan skrip.
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp; sub function { croak "Error in module!"; } 1;
memanggil atur cara berikut dalam skrip:
use T; function();
Jalankan atur cara di atas, hasil keluarannya ialah:
Error in module! at test.pl line 4
fungsi mengaku
mengaku() dan die() Serupa, tetapi menyediakan surih balik tindanan dari mana ralat berlaku.
package T; require Exporter; @ISA = qw/Exporter/; @EXPORT = qw/function/; use Carp; sub function { confess "Error in module!"; } 1;
Panggil atur cara berikut dalam skrip:
use T; function();
Laksanakan atur cara di atas, hasil keluarannya ialah:
Error in module! at T.pm line 9 T::function() called at test.pl line 4