ພາສາອັງກິດພາສາຝຣັ່ງແອສປາໂຍນ

OnWorks favicon

perldebtut - ອອນລາຍໃນຄລາວ

ແລ່ນ perldebtut ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີຜ່ານ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ນີ້ແມ່ນຄໍາສັ່ງ perldebtut ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ໂຄງການ:

NAME


perldebtut - ການສອນການແກ້ບັນຫາ Perl

ລາຍລະອຽດ


ການແນະນໍາທີ່ມີນ້ໍາຫນັກເບົາ (ຫຼາຍ) ໃນການນໍາໃຊ້ perl debugger, ແລະຕົວຊີ້ໄປຫາ
ທີ່ມີຢູ່ແລ້ວ, ແຫຼ່ງຂໍ້ມູນທີ່ເລິກເຊິ່ງກ່ຽວກັບໂຄງການ debugging perl.

ມີ​ຄົນ​ທີ່​ບໍ່​ຮູ້​ຈັກ​ຫຍັງ​ເລີຍ
ກ່ຽວກັບການໃຊ້ perl debugger, ເຖິງແມ່ນວ່າພວກເຂົາໃຊ້ພາສາທຸກໆມື້. ນີ້ແມ່ນສໍາລັບພວກເຂົາ.

ການນໍາໃຊ້ ຢ່າງເຄັ່ງຄັດ


ກ່ອນອື່ນ ໝົດ, ມີບາງສິ່ງທີ່ເຈົ້າສາມາດເຮັດໄດ້ເພື່ອເຮັດໃຫ້ຊີວິດຂອງເຈົ້າມີຄວາມກົງໄປກົງມາຫຼາຍ
ໃນເວລາທີ່ມັນມາກັບ debugging ໂຄງການ perl, ໂດຍບໍ່ມີການນໍາໃຊ້ debugger ທັງຫມົດ. ເຖິງ
ສະແດງໃຫ້ເຫັນ, ນີ້ແມ່ນ script ງ່າຍດາຍ, ທີ່ມີຊື່ວ່າ "ສະບາຍດີ", ມີບັນຫາ:

#!/usr/bin/perl

$var1 = 'ສະບາຍດີໂລກ'; #ຢາກເຮັດແບບນັ້ນສະເໝີ :-)
$var2 = "$varl\n";

ພິມ $var2;
ອອກ;

ໃນຂະນະທີ່ນີ້ລວບລວມແລະດໍາເນີນການຢ່າງມີຄວາມສຸກ, ມັນອາດຈະບໍ່ເຮັດສິ່ງທີ່ຄາດຫວັງ, ຄືມັນ
ບໍ່ໄດ້ພິມ "ສະບາຍດີໂລກ\n" ເລີຍ; ໃນທາງກົງກັນຂ້າມ, ມັນຈະເຮັດສິ່ງທີ່ມັນແມ່ນ
ບອກໃຫ້ເຮັດ, ຄອມພິວເຕີເປັນແນວນັ້ນເລັກນ້ອຍ. ນັ້ນແມ່ນ, ມັນຈະພິມອອກເສັ້ນໃຫມ່
ລັກສະນະ, ແລະທ່ານຈະໄດ້ຮັບສິ່ງທີ່ຄ້າຍຄືເສັ້ນເປົ່າ. ເບິ່ງຄືວ່າມີ 2 ຕົວແປ
ເມື່ອ (ຍ້ອນການພິມຜິດ) ມີ 3 ແທ້ໆ:

$var1 = 'ສະບາຍດີໂລກ';
$varl = undef;
$var2 = "\n";

ເພື່ອຈັບບັນຫາແບບນີ້, ພວກເຮົາສາມາດບັງຄັບໃຫ້ແຕ່ລະຕົວແປຖືກປະກາດກ່ອນທີ່ຈະໃຊ້ໂດຍ
ດຶງຢູ່ໃນໂມດູນທີ່ເຄັ່ງຄັດ, ໂດຍການວາງ 'ໃຊ້ຢ່າງເຄັ່ງຄັດ;' ຫຼັງຈາກແຖວທໍາອິດຂອງ script.

ໃນປັດຈຸບັນໃນເວລາທີ່ທ່ານດໍາເນີນການມັນ, perl ຈົ່ມກ່ຽວກັບ 3 ຕົວແປທີ່ບໍ່ໄດ້ປະກາດແລະພວກເຮົາໄດ້ຮັບສີ່ຄວາມຜິດພາດ.
ຂໍ້ຄວາມເພາະວ່າຕົວແປຫນຶ່ງຖືກອ້າງອີງສອງຄັ້ງ:

ສັນຍາລັກທົ່ວໂລກ "$var1" ຕ້ອງການຊື່ແພັກເກັດທີ່ຊັດເຈນຢູ່ທີ່ ./t1 ແຖວ 4.
ສັນຍາລັກທົ່ວໂລກ "$var2" ຕ້ອງການຊື່ແພັກເກັດທີ່ຊັດເຈນຢູ່ທີ່ ./t1 ແຖວ 5.
ສັນຍາລັກທົ່ວໂລກ "$varl" ຕ້ອງການຊື່ແພັກເກັດທີ່ຊັດເຈນຢູ່ທີ່ ./t1 ແຖວ 5.
ສັນຍາລັກທົ່ວໂລກ "$var2" ຕ້ອງການຊື່ແພັກເກັດທີ່ຊັດເຈນຢູ່ທີ່ ./t1 ແຖວ 7.
ການປະຕິບັດ ./hello ຖືກຍົກເລີກເນື່ອງຈາກຄວາມຜິດພາດການລວບລວມ.

ລູເວີລີ! ແລະເພື່ອແກ້ໄຂນີ້, ພວກເຮົາປະກາດຕົວແປທັງຫມົດຢ່າງຊັດເຈນແລະໃນປັດຈຸບັນ script ຂອງພວກເຮົາເບິ່ງ
ເຊັ່ນນີ້:

#!/usr/bin/perl
ໃຊ້ຢ່າງເຄັ່ງຄັດ;

ຂອງຂ້ອຍ $var1 = 'ສະບາຍດີໂລກ';
$varl ຂອງຂ້ອຍ = undef;
$var2 = "$varl\n" ຂອງຂ້ອຍ;

ພິມ $var2;
ອອກ;

ຫຼັງຈາກນັ້ນ, ພວກເຮົາເຮັດ (ຄວາມຄິດທີ່ດີສະເຫມີ) ການກວດສອບ syntax ກ່ອນທີ່ພວກເຮົາຈະພະຍາຍາມດໍາເນີນການອີກເທື່ອຫນຶ່ງ:

> perl -c ສະບາຍດີ
ສະບາຍດີ syntax OK

ແລະດຽວນີ້ເມື່ອພວກເຮົາແລ່ນມັນ, ພວກເຮົາຍັງໄດ້ຮັບ "\n", ແຕ່ຢ່າງນ້ອຍພວກເຮົາຮູ້ວ່າເປັນຫຍັງ. ພຽງແຕ່ໄດ້ຮັບນີ້
script ທີ່ຈະລວບລວມໄດ້ເປີດເຜີຍຕົວແປ '$varl' (ດ້ວຍຕົວອັກສອນ 'l') ແລະງ່າຍດາຍ.
ການປ່ຽນ $varl ເປັນ $var1 ແກ້ໄຂບັນຫາໄດ້.

ຊອກຫາ at ຂໍ້ມູນ ແລະ -w ແລະ v


ຕົກລົງ, ແຕ່ເມື່ອທ່ານຕ້ອງການເບິ່ງຂໍ້ມູນຂອງທ່ານແທ້ໆ, ແມ່ນຫຍັງຢູ່ໃນຕົວແປແບບເຄື່ອນໄຫວນັ້ນ,
ກ່ອນ​ທີ່​ຈະ​ນໍາ​ໃຊ້​ມັນ​?

#!/usr/bin/perl
ໃຊ້ຢ່າງເຄັ່ງຄັດ;

$key ຂອງຂ້ອຍ = 'ຍິນດີຕ້ອນຮັບ';
%data ຂອງຂ້ອຍ = (
'ນີ້' => qw(ນັ້ນ),
'tom' => qw(ແລະ jerry),
'ຍິນດີຕ້ອນຮັບ' => q(ສະບາຍດີໂລກ),
'zip' => q(ຍິນດີຕ້ອນຮັບ),
);
@data ຂອງຂ້ອຍ = ລະຫັດ %data;

ພິມ "$data{$key}\n";
ອອກ;

ເບິ່ງຄືວ່າ OK, ຫຼັງຈາກທີ່ມັນຜ່ານການກວດສອບ syntax (perl -c scriptname), ພວກເຮົາດໍາເນີນການແລະທັງຫມົດ.
ພວກເຮົາໄດ້ຮັບແມ່ນເສັ້ນເປົ່າອີກເທື່ອຫນຶ່ງ! ຮືມມມ.

ຫນຶ່ງໃນວິທີການແກ້ບັນຫາທົ່ວໄປຢູ່ທີ່ນີ້, ຈະເປັນການປະຖິ້ມຄໍາຖະແຫຼງການພິມບາງຢ່າງຢ່າງເສລີ,
ເພື່ອເພີ່ມການກວດສອບກ່ອນທີ່ພວກເຮົາຈະພິມອອກຂໍ້ມູນຂອງພວກເຮົາ, ແລະອັນອື່ນຫຼັງຈາກ:

ພິມ "ຕົກລົງທັງໝົດ\n" ຖ້າ grep($key, keys %data);
ພິມ "$data{$key}\n";
ພິມ "ແລ້ວໆ: '$data{$key}'\n";

ແລະລອງໃໝ່ອີກ:

> ຂໍ້ມູນ perl
ທັງຫມົດ OK

ສຳເລັດ:''

ຫຼັງຈາກທີ່ຫຼາຍ staring ຢູ່ສິ້ນດຽວກັນຂອງລະຫັດແລະບໍ່ເຫັນໄມ້ສໍາລັບຕົ້ນໄມ້ສໍາລັບການ
ບາງຄັ້ງ, ພວກເຮົາໄດ້ຮັບກາເຟຈອກຫນຶ່ງແລະພະຍາຍາມວິທີການອື່ນ. ນັ້ນແມ່ນ, ພວກເຮົາເອົາມາໃຫ້
ທະຫານມ້າໂດຍການໃຫ້ perl ໄດ້ '-d' ສະ​ຫຼັບ​ເສັ້ນ​ຄໍາ​ສັ່ງ​:

> ຂໍ້ມູນ perl -d
ຟື້ນຟູຕົວຈັບການຕາຍເລີ່ມຕົ້ນແລ້ວ.

ກຳລັງໂຫຼດ DB routines ຈາກ perl5db.pl ເວີຊັ່ນ 1.07
ຮອງຮັບບັນນາທິການໄດ້.

ປ້ອນ h ຫຼື 'hh' ສໍາລັບການຊ່ວຍເຫຼືອ, ຫຼື 'man perldebug' ສໍາລັບການຊ່ວຍເຫຼືອເພີ່ມເຕີມ.

main::./data:4): my $key = 'ຍິນດີຕ້ອນຮັບ';

ດຽວນີ້, ສິ່ງທີ່ພວກເຮົາໄດ້ເຮັດຢູ່ນີ້ແມ່ນການເປີດຕົວ perl debugger ທີ່ມີຕົວຕົນຢູ່ໃນສະຄິບຂອງພວກເຮົາ. ມັນ
ຢຸດຢູ່ແຖວທໍາອິດຂອງລະຫັດປະຕິບັດໄດ້ແລະລໍຖ້າການປ້ອນຂໍ້ມູນ.

ກ່ອນທີ່ພວກເຮົາຈະໄປຕື່ມອີກ, ທ່ານຢາກຮູ້ວິທີການອອກຈາກຕົວດີບັກ: ໃຊ້ພຽງແຕ່
ຈົດໝາຍ 'q', ບໍ່ແມ່ນຄຳວ່າ 'ເຊົາ' ຫຼື 'ອອກ':

DB<1> q
>

ນັ້ນ​ແມ່ນ​ມັນ, ທ່ານ​ກັບ​ຄືນ​ໄປ​ບ່ອນ turf ເຮືອນ​ອີກ​ເທື່ອ​ຫນຶ່ງ.

ຊ່ວຍເຫຼືອ


ເປີດຕົວດີບັກຂຶ້ນອີກຄັ້ງໃນສະຄຣິບຂອງເຈົ້າ ແລະພວກເຮົາຈະເບິ່ງຢູ່ໃນເມນູຊ່ວຍເຫຼືອ. ມີ
ສອງ​ສາມ​ວິ​ທີ​ການ​ໂທ​ຫາ​ການ​ຊ່ວຍ​ເຫຼືອ​: ງ່າຍ​ດາຍ 'h'ຈະ​ໄດ້​ຮັບ​ບັນ​ຊີ​ລາຍ​ການ​ສະ​ຫຼຸບ​ການ​ຊ່ວຍ​ເຫຼືອ​,'|h' (ທໍ່-ຊ)
ຈະທໍ່ການຊ່ວຍເຫຼືອຜ່ານ pager ຂອງທ່ານ (ເຊິ່ງອາດຈະເປັນ 'ຫຼາຍ' ຫຼື 'ຫນ້ອຍ'), ແລະສຸດທ້າຍ,
'h h' (h-space-h) ຈະໃຫ້ທ່ານມີຫນ້າຈໍຊ່ວຍເຫຼືອທັງຫມົດ. ນີ້ແມ່ນໜ້າສະຫຼຸບ:

D1h

ລາຍຊື່/ແຫຼ່ງຄົ້ນຫາ: ຄວບຄຸມການດຳເນີນການສະຄຣິບ:
l [ln|sub] ລາຍການລະຫັດແຫຼ່ງ T Stack trace
- ຫຼື . ບອກແຖວກ່ອນໜ້າ/ປັດຈຸບັນ s [expr] ຂັ້ນຕອນດຽວ [in expr]
v [line] ເບິ່ງຮອບແຖວ n [expr] ຕໍ່ໄປ, ຂັ້ນຕອນຫຼາຍກວ່າ subs
f ຊື່ໄຟລ໌ ເບິ່ງແຫຼ່ງໃນໄຟລ໌ ເຮັດຊ້ຳ n ຫຼື s
/pattern/ ?patt? ຄົ້ນຫາ forw/backw r ກັບຄືນຈາກລາຍການຍ່ອຍ
M ສະແດງໂມດູນຮຸ່ນ c [ln|sub] ສືບຕໍ່ຈົນກ່ວາຕໍາແຫນ່ງ
ການຄວບຄຸມ Debugger: L ລາຍການ break/watch/actions
o [... ] ກໍານົດຕົວເລືອກ debugger t [expr] ສະຫຼັບການຕິດຕາມ [trace expr]
<[<]|{[{]|>[>] [cmd] ເຮັດ pre/post-prompt b [ln|event|sub] [cnd] ຕັ້ງຈຸດຢຸດ
! [N|pat] ເຮັດຄືນຄໍາສັ່ງກ່ອນໜ້າ B ln|* ລຶບ a/all breakpoints
H [-num] ສະແດງຄໍາສັ່ງເລກສຸດທ້າຍ a [ln] cmd Do cmd ກ່ອນແຖວ
= [a val] ກຳນົດ/ລາຍຊື່ນາມແຝງ A ln|* ລົບ a/all actions
h [db_cmd] ຂໍຄວາມຊ່ວຍເຫຼືອກ່ຽວກັບຄໍາສັ່ງ w expr ເພີ່ມການສະແດງອອກຂອງໂມງ
hh ສໍາເລັດຫນ້າຊ່ວຍເຫຼືອ W expr|* ລຶບ a/all watch exprs
|[|]db_cmd ສົ່ງຜົນອອກໄປຫາ pager ![!] syscmd ແລ່ນ cmd ໃນຂະບວນການຍ່ອຍ
q ຫຼື ^D ອອກ R ພະຍາຍາມປິດເປີດໃໝ່
ການກວດສອບຂໍ້ມູນ: expr ປະຕິບັດລະຫັດ perl, ຍັງເບິ່ງ: s,n,t expr
x|m expr Evals expr ໃນບໍລິບົດລາຍການ, dumps ຜົນໄດ້ຮັບຫຼືລາຍການວິທີການ.
p expr ພິມສະແດງອອກ (ໃຊ້ຊຸດປະຈຸບັນຂອງ script).
S [[!]pat] ບອກຊື່ຍ່ອຍຍ່ອຍ [ບໍ່] ຮູບແບບທີ່ກົງກັນ
V [Pk [Vars]] ລາຍຊື່ຕົວແປໃນຊຸດ. Vars ສາມາດເປັນ ~ ຮູບແບບຫຼື !pattern.
X [Vars] ຄືກັນກັບ "V current_package [Vars]".
y [n [Vars]] ລາຍການ lexicals ໃນຂອບເຂດທີ່ສູງກວ່າ . Vars ຄືກັນກັບ V.
ສໍາລັບການຊ່ວຍເຫຼືອເພີ່ມເຕີມ, ພິມ h cmd_letter, ຫຼື run man perldebug ສໍາລັບເອກະສານທັງຫມົດ.

ທາງເລືອກທີ່ສັບສົນຫຼາຍກ່ວາທີ່ທ່ານສາມາດສັ່ນໄມ້ໃຫຍ່ຢູ່! ມັນບໍ່ແມ່ນບໍ່ດີເທົ່າທີ່ມັນເບິ່ງແລະ
ມັນເປັນປະໂຫຍດຫຼາຍທີ່ຈະຮູ້ເພີ່ມເຕີມກ່ຽວກັບມັນທັງຫມົດ, ແລະມ່ວນຄືກັນ!

ມີສອງສາມອັນທີ່ເປັນປະໂຫຍດທີ່ຈະຮູ້ກ່ຽວກັບທັນທີ. ເຈົ້າຈະບໍ່ຄິດວ່າພວກເຮົາແມ່ນ
ການນໍາໃຊ້ຫ້ອງສະຫມຸດໃດໆໃນທຸກເວລາ, ແຕ່ 'M' ຈະສະແດງໃຫ້ເຫັນວ່າໂມດູນໃດໃນປະຈຸບັນ
loaded, ແລະຈໍານວນສະບັບຂອງເຂົາເຈົ້າ, ໃນຂະນະທີ່ 'm'ຈະ​ສະ​ແດງ​ໃຫ້​ເຫັນ​ວິ​ທີ​ການ​, ແລະ 'S' ສະແດງໃຫ້ເຫັນທັງຫມົດ
subroutines (ໂດຍຮູບແບບ) ດັ່ງທີ່ສະແດງຂ້າງລຸ່ມນີ້. 'V'ແລະ'X'ສະແດງຕົວແປໃນໂຄງການໂດຍ
ຂອບເຂດຂອງຊຸດແລະສາມາດຖືກຈໍາກັດໂດຍຮູບແບບ.

DB<2>S str
dumpvar::stringify
ເຄັ່ງຄັດ::bits
ເຂັ້ມງວດ::ນໍາເຂົ້າ
ເຂັ້ມງວດ::unimport

ການນໍາໃຊ້ 'X' ແລະພີ່ນ້ອງຮຽກຮ້ອງໃຫ້ທ່ານບໍ່ໃຊ້ຕົວລະບຸປະເພດ ($@%), ພຽງແຕ່ 'ຊື່':

DM<3>X ~err
FileHandle(stderr) => fileno(2​)

ຈົ່ງຈື່ໄວ້ວ່າພວກເຮົາຢູ່ໃນໂຄງການນ້ອຍໆຂອງພວກເຮົາທີ່ມີບັນຫາ, ພວກເຮົາຄວນຈະເບິ່ງວ່າພວກເຮົາຢູ່ໃສ,
ແລະຂໍ້ມູນຂອງພວກເຮົາມີລັກສະນະແນວໃດ. ກ່ອນ​ອື່ນ​ຫມົດ​ໃຫ້​ເບິ່ງ​ລະ​ຫັດ​ບາງ​ຢ່າງ​ຢູ່​ໃນ​ຕໍາ​ແຫນ່ງ​ໃນ​ປັດ​ຈຸ​ບັນ​ຂອງ​ພວກ​ເຮົາ​
(ເສັ້ນທໍາອິດຂອງລະຫັດໃນກໍລະນີນີ້), ຜ່ານ 'v':

DB<4> v
1 #!/usr/bin/perl
2: ໃຊ້ຢ່າງເຂັ້ມງວດ;
3
4==> $key ຂອງຂ້ອຍ = 'ຍິນດີຕ້ອນຮັບ';
5: %data ຂອງຂ້ອຍ = (
6 'ນີ້' => qw(ນັ້ນ),
7 'tom' => qw(ແລະ jerry),
8 'ຍິນດີຕ້ອນຮັບ' => q(ສະບາຍດີໂລກ),
9 'zip' => q(ຍິນດີຕ້ອນຮັບ),
10 );

ຢູ່ແຖວທີ 4 ແມ່ນຕົວຊີ້ທີ່ເປັນປະໂຫຍດ, ເຊິ່ງບອກທ່ານວ່າຕອນນີ້ເຈົ້າຢູ່ໃສ. ເພື່ອເບິ່ງເພີ່ມເຕີມ
ລະຫັດ, ພິມ 'v' ອີກເທື່ອຫນຶ່ງ:

DB<4> v
8 'ຍິນດີຕ້ອນຮັບ' => q(ສະບາຍດີໂລກ),
9 'zip' => q(ຍິນດີຕ້ອນຮັບ),
10 );
11: my @data = ລະຫັດ %data;
12: ພິມ "ຕົກລົງທັງໝົດ\n" ຖ້າ grep($key, keys %data);
13: ພິມ "$data{$key}\n";
14: ພິມ "ແລ້ວໆ: '$data{$key}'\n";
15: ອອກ;

ແລະຖ້າທ່ານຕ້ອງການລາຍຊື່ເສັ້ນ 5 ອີກເທື່ອຫນຶ່ງ, ພິມ 'l 5', (ຫມາຍເຫດຊ່ອງ):

DB<4> l 5
5: %data ຂອງຂ້ອຍ = (

ໃນ​ກໍ​ລະ​ນີ​ນີ້​, ບໍ່​ມີ​ຫຼາຍ​ທີ່​ຈະ​ເບິ່ງ​, ແຕ່​ແນ່​ນອນ​ວ່າ​ໂດຍ​ປົກ​ກະ​ຕິ​ມີ​ຫນ້າ​ຂອງ​ສິ່ງ​ທີ່​ຈະ​
ຍ່າງຜ່ານ, ແລະ 'l' ສາມາດເປັນປະໂຫຍດຫຼາຍ. ເພື່ອຣີເຊັດມຸມມອງຂອງທ່ານເປັນແຖວທີ່ພວກເຮົາກຳລັງຈະໄປ
execute, type a lone period '.':

DB<5> .
main::./data_a:4): my $key = 'ຍິນດີຕ້ອນຮັບ';

ເສັ້ນທີ່ສະແດງແມ່ນເສັ້ນທີ່ກໍາລັງຈະຖືກປະຕິບັດ ຕໍ່ໄປ, ມັນຍັງບໍ່ໄດ້ເກີດຂຶ້ນເທື່ອ. ດັ່ງນັ້ນ
ໃນຂະນະທີ່ພວກເຮົາສາມາດພິມຕົວແປດ້ວຍຕົວອັກສອນ 'p', ໃນຈຸດນີ້ທັງຫມົດທີ່ພວກເຮົາຈະໄດ້ຮັບແມ່ນຫວ່າງເປົ່າ
(ບໍ່ໄດ້ກໍານົດ) ຄ່າກັບຄືນ. ສິ່ງທີ່ພວກເຮົາຕ້ອງເຮັດຄືການກ້າວຜ່ານການປະຕິບັດຕໍ່ໄປ
ຖະແຫຼງການທີ່ມີ 's':

DB<6> s
ຫຼັກ::./data_a:5): %data ຂອງຂ້ອຍ = (
ຫຼັກ::./data_a:6): 'ນີ້' => qw(ນັ້ນ),
ຫຼັກ::./data_a:7): 'tom' => qw(ແລະ jerry),
ຫຼັກ::./data_a:8): 'ຍິນດີຕ້ອນຮັບ' => q(ສະບາຍດີໂລກ),
ຫຼັກ::./data_a:9): 'zip' => q(ຍິນດີຕ້ອນຮັບ),
ຕົ້ນຕໍ::./data_a:10): );

ຕອນນີ້ພວກເຮົາສາມາດເບິ່ງຕົວແປທຳອິດ ($key) ໄດ້:

DB<7> p $key
ຍິນດີຕ້ອນຮັບ

ເສັ້ນ 13 ແມ່ນບ່ອນທີ່ການດໍາເນີນການ, ສະນັ້ນໃຫ້ພວກເຮົາສືບຕໍ່ລົງໄປທີ່ນັ້ນໂດຍຜ່ານຕົວອັກສອນ 'c', ທີ່
ໂດຍວິທີທາງການ, ແຊກຈຸດແບ່ງ 'ຄັ້ງດຽວ' ຢູ່ໃນແຖວທີ່ໃຫ້ ຫຼື ປົກກະຕິຍ່ອຍ:

DB<8> ຄ 13
ທັງຫມົດ OK
main::./data_a:13): ພິມ "$data{$key}\n";

ພວກ​ເຮົາ​ໄດ້​ຜ່ານ​ການ​ກວດ​ສອບ​ຂອງ​ພວກ​ເຮົາ (ບ່ອນ​ທີ່ 'OK ທັງ​ຫມົດ' ໄດ້​ຖືກ​ພິມ​ອອກ​) ແລະ​ໄດ້​ຢຸດ​ເຊົາ​ການ​ກ່ອນ​ທີ່​ຈະ​ໄດ້​
ຊີ້ນຂອງວຽກງານຂອງພວກເຮົາ. ພວກເຮົາສາມາດພະຍາຍາມພິມອອກສອງສາມຕົວແປເພື່ອເບິ່ງວ່າແມ່ນຫຍັງ
ເກີດຂຶ້ນ:

DB<9> p $data{$key}

ບໍ່ຫຼາຍປານໃດ, ຂໍໃຫ້ເບິ່ງ hash ຂອງພວກເຮົາ:

DB<10> p %data
ສະບາຍດີ Worldziptomandwelcomejerrywelcomethisthat

DB<11> p ປຸ່ມ %data
ສະບາຍດີ Worldtomwelcomejerrythis

ດີ, ນີ້ບໍ່ແມ່ນເລື່ອງງ່າຍທີ່ຈະອ່ານ, ແລະການນໍາໃຊ້ຄູ່ມືທີ່ເປັນປະໂຫຍດ (h h), ໄດ້ 'x' ຄໍາ​ສັ່ງ​
ເບິ່ງ​ຄື​ວ່າ​ມີ​ຄໍາ​ຫມັ້ນ​ສັນ​ຍາ​:

DB<12> x %data
0 'ສະບາຍດີໂລກ'
1 ຊິບ
2 'ທອມ'
3 'ແລະ'
4 ຍິນ​ດີ​ຕ້ອນ​ຮັບ
5 undef
6 ແຈຣີ
7 ຍິນ​ດີ​ຕ້ອນ​ຮັບ
8 ນີ້
9 'ນັ້ນ'

ນັ້ນບໍ່ໄດ້ຊ່ວຍຫຍັງຫຼາຍ, ມີການຕ້ອນຮັບສອງສາມຄົນຢູ່ໃນນັ້ນ, ແຕ່ບໍ່ມີການຊີ້ບອກວ່າອັນໃດເປັນກະແຈ,
ແລະທີ່ເປັນຄ່າ, ມັນເປັນພຽງແຕ່ dump array ທີ່ລະບຸໄວ້ແລະ, ໃນກໍລະນີນີ້, ບໍ່ແມ່ນໂດຍສະເພາະ
ເປັນ​ປະ​ໂຫຍດ. trick ທີ່ນີ້, ແມ່ນການນໍາໃຊ້ a ອ້າງອິງ ໂຄງສ້າງຂໍ້ມູນ:

DB<13> x \%data
0 Hash(0x8194bc4)
'ສະບາຍດີໂລກ' => 'zip'
'jerry' => 'ຍິນດີຕ້ອນຮັບ'
'ນີ້' => 'ນັ້ນ'
'ທອມ' => 'ແລະ'
'ຍິນດີຕ້ອນຮັບ' => undef

ການອ້າງອິງຖືກຖິ້ມຂີ້ເຫຍື້ອຢ່າງແທ້ຈິງແລະໃນທີ່ສຸດພວກເຮົາສາມາດເຫັນສິ່ງທີ່ພວກເຮົາກໍາລັງຈັດການກັບ. ການອ້າງອີງຂອງພວກເຮົາ
ຖືກ​ຕ້ອງ​ຢ່າງ​ສົມ​ບູນ​ແຕ່​ຜິດ​ສໍາ​ລັບ​ຈຸດ​ປະ​ສົງ​ຂອງ​ພວກ​ເຮົາ, ກັບ 'ແລະ jerry' ຖືກ​ຖື​ເປັນ 2
ແຍກຄໍາສັບຕ່າງໆແທນທີ່ຈະເປັນປະໂຫຍກ, ດັ່ງນັ້ນຈຶ່ງຖິ້ມໂຄງສ້າງ hash ທີ່ເປັນຄູ່ເທົ່າທຽມກັນອອກຈາກ
ການຈັດວາງ.

ໄດ້ '-w' switch ຈະບອກພວກເຮົາກ່ຽວກັບເລື່ອງນີ້, ພວກເຮົາໃຊ້ມັນໃນຕອນເລີ່ມຕົ້ນ, ແລະຊ່ວຍປະຢັດພວກເຮົາ a
ບັນ​ຫາ​ຫຼາຍ​:

> ຂໍ້ມູນ perl -w
ຈຳນວນຄີກຂອງອົງປະກອບໃນການມອບໝາຍ hash ຢູ່ ./data line 5.

ພວກເຮົາແກ້ໄຂຄໍາອ້າງອີງຂອງພວກເຮົາ: 'tom' => q (ແລະ jerry), ແລະດໍາເນີນການອີກເທື່ອຫນຶ່ງ, ໃນເວລານີ້ພວກເຮົາໄດ້ຮັບຄວາມຄາດຫວັງຂອງພວກເຮົາ.
ຜົນຜະລິດ:

> ຂໍ້ມູນ perl -w
ສະບາຍດີໂລກ

ໃນຂະນະທີ່ພວກເຮົາຢູ່ທີ່ນີ້, ຈົ່ງເບິ່ງທີ່ໃກ້ຊິດກັບ 'x'ຄໍາສັ່ງ, ມັນເປັນປະໂຫຍດແທ້ໆແລະຈະ
merrily dump ອອກການອ້າງອິງ nested, ວັດຖຸສໍາເລັດ, ວັດຖຸບາງສ່ວນ - ພຽງແຕ່ກ່ຽວກັບ
ສິ່ງໃດກໍ່ຕາມທີ່ເຈົ້າຖິ້ມມັນ:

ໃຫ້ພວກເຮົາສ້າງວັດຖຸໄວແລະ x-plode ມັນ, ທໍາອິດພວກເຮົາຈະເລີ່ມຕົ້ນການດີບັກ: ມັນຕ້ອງການບາງ
ຮູບແບບການປ້ອນຂໍ້ມູນຈາກ STDIN, ດັ່ງນັ້ນພວກເຮົາຈຶ່ງໃຫ້ມັນເປັນສິ່ງທີ່ບໍ່ເປັນສັນຍາ, ສູນ:

> perl -de 0
ຟື້ນຟູຕົວຈັບການຕາຍເລີ່ມຕົ້ນແລ້ວ.

ກຳລັງໂຫຼດ DB routines ຈາກ perl5db.pl ເວີຊັ່ນ 1.07
ຮອງຮັບບັນນາທິການໄດ້.

ປ້ອນ h ຫຼື 'hh' ສໍາລັບການຊ່ວຍເຫຼືອ, ຫຼື 'man perldebug' ສໍາລັບການຊ່ວຍເຫຼືອເພີ່ມເຕີມ.

ຫຼັກ::(-e:1): 0

ຕອນນີ້ສ້າງວັດຖຸທີ່ບິນຢູ່ເທິງສອງແຖວ (ສັງເກດ backslash):

DB<1> $obj = ພອນ({'unique_id'=>'123', 'attr'=> \
cont: {'col' => 'black', 'ສິ່ງຂອງ' => [qw(ອັນນີ້ເປັນຕົ້ນ)]}}, 'MY_class')

ແລະ​ໃຫ້​ເຮົາ​ມາ​ເບິ່ງ​ກັນ​ເລີຍ:

DB<2> x $obj
0 MY_class=Hash(0x828ad98)
'attr' => Hash(0x828ad68)
'col' => 'ສີດຳ'
'ສິ່ງຂອງ' => ວັນເສົາ(0x828abb8)
0 ນີ້
1 'ນັ້ນ'
2 'etc'
'unique_id' => 123
DB<3>

ມີປະໂຫຍດ, huh? ທ່ານ​ສາ​ມາດ​ປະ​ເມີນ​ຜົນ​ເກືອບ​ທັງ​ຫມົດ​ໃນ​ນັ້ນ​, ແລະ​ທົດ​ລອງ​ທີ່​ມີ bits ຂອງ​ລະ​ຫັດ​ຫຼື​
regexes ຈົນກ່ວາງົວມາເຮືອນ:

DB<3> @data = qw(ນີ້​ແມ່ນ​ວ່າ​ທິດ​ສະ​ດີ​ຫນັງ atheism ອື່ນໆ scythe​)

DB<4> p 'saw -> '.($cnt += map { print "\t:\t$_\n" } grep(/the/, sort @data))
atheism
ຫນັງ
ອື່ນໆ
ມີດ
ໄດ້
ທິດສະດີ
saw -> 6

ຖ້າທ່ານຕ້ອງການເບິ່ງຄໍາສັ່ງ History, ພິມ 'H':

DB<5> H
4: p ' saw -> '.($cnt += map { print "\t:\t$_\n" } grep(/the/, sort @data))
3: @data = qw(ອັນນີ້ວ່າທິດສະດີໜັງທີ່ບໍ່ເຊື່ອໃນສາສະໜາອື່ນ scythe)
2: x $obj
1: $obj = ພອນ({'unique_id'=>'123', 'attr'=>
{'col' => 'ສີດຳ', 'ສິ່ງຂອງ' => [qw(ອັນນີ້ເປັນຕົ້ນ)]}}, 'MY_class')
DB<5>

ແລະຖ້າທ່ານຕ້ອງການເຮັດຊ້ໍາຄໍາສັ່ງໃດໆທີ່ຜ່ານມາ, ໃຫ້ໃຊ້ exclamation: '!':

DB<5> !4
p ' saw -> '.($cnt += ແຜນທີ່ {ພິມ "$_\n" } grep(/the/, sort @data))
atheism
ຫນັງ
ອື່ນໆ
ມີດ
ໄດ້
ທິດສະດີ
saw -> 12

ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບການອ້າງອີງເບິ່ງ perlref ແລະ perlreftut

Stepping ໂດຍຜ່ານການ ລະຫັດ


ນີ້ແມ່ນໂຄງການທີ່ງ່າຍດາຍທີ່ຈະແປງລະຫວ່າງ Celsius ແລະ Fahrenheit, ມັນມີ a
ບັນຫາ:

#!/usr/bin/perl -w
ໃຊ້ຢ່າງເຄັ່ງຄັດ;

$arg ຂອງຂ້ອຍ = $ARGV[0] || '-c20';

ຖ້າ ($arg =~ /^\-(c|f)((\-|\+)*\d+(\.\d+)*)$/) {
ຂອງຂ້ອຍ ($deg, $num) = ($1, $2);
ຂອງຂ້ອຍ ($in, $out) = ($num, $num);
ຖ້າ ($deg eq 'c') {
$deg = 'f';
$out = &c2f($num);
} else {
$deg = 'ຄ';
$out = &f2c($num);
}
$out = sprintf('%0.2f', $out);
$out =~ s/^((\-|\+)*\d+)\.0+$/$1/;
ພິມ "$out $deg\n";
} else {
ພິມ "ການນໍາໃຊ້: $0 -[c|f] num\n";
}
ອອກ;

ຍ່ອຍ f2c {
ຂອງຂ້ອຍ $f = shift;
$c ຂອງຂ້ອຍ = 5 * $f - 32 / 9;
ກັບຄືນ $c;
}

ຍ່ອຍ c2f {
$c ຂອງຂ້ອຍ = shift;
ຂອງຂ້ອຍ $f = 9 * $c / 5 + 32;
ກັບຄືນ $f;
}

ສໍາລັບເຫດຜົນບາງຢ່າງ, ການແປງ Fahrenheit ເປັນ Celsius ບໍ່ສາມາດກັບຄືນຜົນຜະລິດທີ່ຄາດໄວ້.
ນີ້ແມ່ນສິ່ງທີ່ມັນເຮັດ:

> temp -c0.72
33.30 f

> temp -f33.3
162.94 c

ບໍ່ສອດຄ່ອງຫຼາຍ! ພວກ​ເຮົາ​ຈະ​ກໍາ​ນົດ breakpoint ໃນ​ລະ​ຫັດ​ດ້ວຍ​ຕົນ​ເອງ​ແລະ​ດໍາ​ເນີນ​ການ​ມັນ​ພາຍ​ໃຕ້​ການ​
debugger ເພື່ອເບິ່ງວ່າມີຫຍັງເກີດຂຶ້ນ. ຈຸດຢຸດແມ່ນທຸງ, ເຊິ່ງຕົວດີບັກຈະແລ່ນ
ໂດຍບໍ່ມີການຂັດຂວາງ, ເມື່ອມັນມາຮອດຈຸດຢຸດ, ມັນຈະຢຸດການປະຕິບັດແລະສະເຫນີ a
ກະຕຸ້ນໃຫ້ມີການໂຕ້ຕອບຕື່ມອີກ. ໃນການນໍາໃຊ້ປົກກະຕິ, ຄໍາສັ່ງ debugger ເຫຼົ່ານີ້ແມ່ນສົມບູນ
ບໍ່ສົນໃຈ, ແລະພວກເຂົາມີຄວາມປອດໄພ - ຖ້າ messy ເລັກນ້ອຍ, ໃຫ້ອອກຈາກລະຫັດການຜະລິດ.

ຂອງຂ້ອຍ ($in, $out) = ($num, $num);
$DB::single=2; #ໃສ່ແຖວ9!
ຖ້າ ($deg eq 'c')
...

> perl -d temp -f33.3
ຟື້ນຟູຕົວຈັບການຕາຍເລີ່ມຕົ້ນແລ້ວ.

ກຳລັງໂຫຼດ DB routines ຈາກ perl5db.pl ເວີຊັ່ນ 1.07
ຮອງຮັບບັນນາທິການໄດ້.

ປ້ອນ h ຫຼື 'hh' ສໍາລັບການຊ່ວຍເຫຼືອ, ຫຼື 'man perldebug' ສໍາລັບການຊ່ວຍເຫຼືອເພີ່ມເຕີມ.

ຕົ້ນຕໍ::(temp:4): $arg = $ARGV[0] || '-c100';

ພວກເຮົາພຽງແຕ່ສືບຕໍ່ລົງໄປຫາຈຸດຢຸດທີ່ກໍານົດໄວ້ກ່ອນຂອງພວກເຮົາດ້ວຍ 'c':

DB<1> ຄ
main::(temp:10): if ($deg eq 'c') {

ປະຕິບັດຕາມຄໍາສັ່ງ view ເພື່ອເບິ່ງວ່າພວກເຮົາຢູ່ໃສ:

DB<1> v
7: ຂອງຂ້ອຍ ($deg, $num) = ($1, $2);
8: my ($in, $out) = ($num, $num);
9: $DB::single=2;
10==> ຖ້າ ($deg eq 'c') {
11: $deg = 'f' ;
12: $out = &c2f($num);
13 } ອື່ນ {
14: $deg = 'ຄ';
15: $out = &f2c($num);
16 }

ແລະການພິມເພື່ອສະແດງຄ່າທີ່ພວກເຮົາກໍາລັງໃຊ້ໃນປັດຈຸບັນ:

DB<1> p ​​$deg, $num
f33.3

ພວກເຮົາສາມາດວາງຈຸດແຕກແຍກອື່ນໃສ່ເສັ້ນໃດກໍໄດ້ທີ່ເລີ່ມຕົ້ນດ້ວຍຈໍ້າສອງເມັດ, ພວກເຮົາຈະໃຊ້ເສັ້ນ 17 ເປັນ
ນັ້ນຄືດັ່ງທີ່ພວກເຮົາອອກມາຈາກກິດຈະວັດຍ່ອຍ, ແລະພວກເຮົາຕ້ອງການຢຸດຊົ່ວຄາວຢູ່ທີ່ນັ້ນໃນພາຍຫຼັງ:

DB<2> b 17

ບໍ່ມີຄໍາຕິຊົມຈາກອັນນີ້, ແຕ່ເຈົ້າສາມາດເຫັນໄດ້ວ່າຈຸດແບ່ງຈຸດໃດຖືກຕັ້ງໂດຍການໃຊ້ລາຍຊື່
ຄໍາສັ່ງ 'L':

DB<3> L
ອຸນຫະພູມ:
17: ພິມ "$out $deg\n";
ແຕກຖ້າ (1)

ຈົ່ງຈື່ໄວ້ວ່າເພື່ອລຶບຈຸດຢຸດທີ່ທ່ານໃຊ້ 'B'.

ຕອນນີ້ພວກເຮົາຈະສືບຕໍ່ລົງໃນຕາຕະລາງຍ່ອຍຂອງພວກເຮົາ, ໃນເວລານີ້ແທນທີ່ຈະເປັນຕົວເລກ, ພວກເຮົາຈະ
ໃຊ້ຊື່ຍ່ອຍ, ຕາມດ້ວຍ 'v' ທີ່ຄຸ້ນເຄີຍໃນປັດຈຸບັນ:

DB<3> c f2c
main::f2c(temp:30): my $f = shift;

DB<4> v
24: ອອກ;
25
26 ຍ່ອຍ f2c {
27==> ຂອງຂ້ອຍ $f = shift;
28: $c ຂອງຂ້ອຍ = 5 * $f - 32 / 9;
29: ກັບຄືນ $c;
30 }
31
32 ຍ່ອຍ c2f {
33: my $c = shift;

ໃຫ້ສັງເກດວ່າຖ້າຫາກວ່າມີການໂທຫາ subroutine ລະຫວ່າງພວກເຮົາແລະສາຍ 29, ແລະພວກເຮົາຕ້ອງການ ດຽວ-
ຂັ້ນ​ຕອນ ໂດຍຜ່ານມັນ, ພວກເຮົາສາມາດນໍາໃຊ້ 's'ຄໍາສັ່ງ, ແລະກ້າວຂ້າມມັນພວກເຮົາຈະໃຊ້'n'ທີ່
ຈະດໍາເນີນການຍ່ອຍ, ແຕ່ບໍ່ໄດ້ລົງເຂົ້າໄປໃນມັນສໍາລັບການກວດກາ. ໃນກໍລະນີດັ່ງກ່າວນີ້, ພວກເຮົາ
ພຽງແຕ່ສືບຕໍ່ລົງໄປຫາເສັ້ນ 29:

DB<4> ຄ 29
main::f2c(temp:29): return $c;

ແລະເບິ່ງມູນຄ່າກັບຄືນ:

DB<5> p $c
162.944444444444

ນີ້ບໍ່ແມ່ນຄໍາຕອບທີ່ຖືກຕ້ອງທັງຫມົດ, ແຕ່ຜົນລວມເບິ່ງຄືວ່າຖືກຕ້ອງ. ຂ້ອຍສົງໄສວ່າມັນແມ່ນຫຍັງ
ຈະເຮັດກັບຕົວປະຕິບັດການກ່ອນ? ພວກ​ເຮົາ​ຈະ​ພະ​ຍາ​ຍາມ​ສອງ​ສາມ​ຄວາມ​ເປັນ​ໄປ​ໄດ້​ອື່ນໆ​ທີ່​ມີ​ຜົນ​ລວມ​ຂອງ​ພວກ​ເຮົາ​:

DB<6> p (5 * $f - 32 / 9)
162.944444444444

DB<7> p 5 * $f - (32/9)
162.944444444444

DB<8> p (5*$f) - 32/9
162.944444444444

DB<9> p 5 * ($f - 32) / 9
0.722222222222221

:-) ນັ້ນຄືມັນຫຼາຍ! ຕົກລົງ, ຕອນນີ້ພວກເຮົາສາມາດກໍານົດຕົວແປການກັບຄືນຂອງພວກເຮົາແລະພວກເຮົາຈະກັບຄືນມາ
ຍ່ອຍດ້ວຍ 'r':

DB<10> $c = 5 * ($f - 32) / 9

DB<11> r
ຜົນຕອບແທນຂອງບໍລິບົດ scalar ຈາກຫຼັກ::f2c: 0.722222222222221

ເບິ່ງຄືວ່າດີ, ຂໍໃຫ້ສືບຕໍ່ໄປໃນຕອນທ້າຍຂອງ script:

DB<12> ຄ
0.72 c
ໂປຣແກຣມດີບັ໊ກຖືກປິດແລ້ວ. ໃຊ້ q ເພື່ອອອກ ຫຼື R ເພື່ອປິດເປີດໃໝ່,
ໃຊ້ O inhibit_exit ເພື່ອຫຼີກເວັ້ນການຢຸດຫຼັງຈາກປິດໂຄງການ,
hq, h R ຫຼື h O ເພື່ອຮັບຂໍ້ມູນເພີ່ມເຕີມ.

ການ​ແກ້​ໄຂ​ຢ່າງ​ວ່ອງ​ໄວ​ກັບ​ເສັ້ນ​ທີ່​ກະ​ທໍາ​ຜິດ (ໃສ່​ວົງ​ເລັບ​ທີ່​ຂາດ​ໄປ​) ໃນ​ໂຄງ​ການ​ຕົວ​ຈິງ​
ແລະພວກເຮົາສໍາເລັດ.

placeholder ສໍາລັບການ a, w, t, T


ການປະຕິບັດ, ເບິ່ງຕົວແປ, stack traces ແລະອື່ນໆ: ໃນບັນຊີລາຍຊື່ TODO.

a

w

t

T

REGULAR ການສະແດງອອກ


ເຄີຍຢາກຮູ້ວ່າ regex ມີລັກສະນະແນວໃດ? ທ່ານຈະຕ້ອງການ perl ລວບລວມກັບ
DEBUGGING ທຸງສຳລັບອັນນີ້:

> perl -Dr -e '/^pe(a)*rl$/i'
ການລວບລວມ REx `^pe(a)*rl$'
ຂະໜາດ 17 ອັນທຳອິດຢູ່ທີ່ 2
char ທີ່ຫາຍາກທີ່ສຸດ
ທີ່ 0
1: BOL(2​)
2: EXACTF (4)
4: CURLYN[1] {0,32767}(14)
6: ສິ່ງທີ່ຄວນຮູ້(8​)
8: EXACTF (0)
12: ໃນຂະນະທີ່(0​)
13: ສິ່ງທີ່ຄວນຮູ້(14​)
14: EXACTF (16)
16: EOL(17​)
17: END(0​)
floating `'$ ຢູ່ 4..2147483647 (ກຳລັງກວດສອບການລອຍຕົວ) stclass `EXACTF '
ສະມໍ (BOL) minlen 4
ຍົກເລີກການສະຫນັບສະຫນູນ $` $& $ '.

ກຳລັງປະຕິບັດ...

ປົດປ່ອຍ REx: `^pe(a)*rl$'

ເຈົ້າຢາກຮູ້ແທ້ໆບໍ? :-) ສໍາລັບລາຍລະອຽດ gory ເພີ່ມເຕີມກ່ຽວກັບການສະແດງອອກເປັນປົກກະຕິກັບ
ເຮັດວຽກ, ເບິ່ງ perlre, perlretut, ແລະການຖອດລະຫັດປ້າຍທີ່ລຶກລັບ (BOL ແລະ
CURLYN, ແລະອື່ນໆຂ້າງເທິງ), ເບິ່ງ perldebguts.

OUTPUT ເຄັດລັບການ


ເພື່ອໃຫ້ໄດ້ຮັບຜົນຜະລິດທັງຫມົດຈາກບັນທຶກຄວາມຜິດພາດຂອງທ່ານ, ແລະບໍ່ພາດຂໍ້ຄວາມໃດໆໂດຍຜ່ານການດໍາເນີນງານທີ່ເປັນປະໂຫຍດ
ລະບົບ buffering, ໃສ່ເສັ້ນເຊັ່ນນີ້, ໃນຕອນເລີ່ມຕົ້ນຂອງ script ຂອງທ່ານ:

$|=1;

ເພື່ອເບິ່ງຫາງຂອງ logfile ທີ່ມີການຂະຫຍາຍຕົວແບບເຄື່ອນໄຫວ, (ຈາກເສັ້ນຄໍາສັ່ງ):

tail -f $error_log

ການຫໍ່ສາຍໂທຕາຍທັງໝົດຢູ່ໃນແບບປົກກະຕິຂອງຕົວຈັດການສາມາດເປັນປະໂຫຍດທີ່ຈະເບິ່ງວິທີການ, ແລະຈາກບ່ອນໃດ,
ພວກເຂົາເຈົ້າກໍາລັງຖືກເອີ້ນ, perlvar ມີຂໍ້ມູນເພີ່ມເຕີມ:

BEGIN { $SIG{__DIE__} = ຍ່ອຍ { ຕ້ອງການ Carp; Carp::confess(@_) } }

ເຕັກນິກທີ່ເປັນປະໂຫຍດຕ່າງໆສໍາລັບການປ່ຽນເສັ້ນທາງຂອງ STDOUT ແລະ STDERR filehandles ແມ່ນ
ອະທິບາຍໃນ perlopentut ແລະ perlfaq8.

CGI


ພຽງ​ແຕ່​ເປັນ​ຄໍາ​ແນະ​ນໍາ​ຢ່າງ​ວ່ອງ​ໄວ​ທີ່​ນີ້​ສໍາ​ລັບ​ການ​ທັງ​ຫມົດ​ທີ່​ໂຄງ​ການ CGI ຜູ້​ທີ່​ບໍ່​ສາ​ມາດ​ຄິດ​ອອກ​ວິ​ທີ​ການ​ຢູ່​ໃນ​ໂລກ​
ໃຫ້ຜ່ານໄປວ່າ 'ລໍຖ້າການປ້ອນຂໍ້ມູນ' ເຕືອນ, ເມື່ອແລ່ນສະຄິບ CGI ຂອງພວກເຂົາຈາກຄໍາສັ່ງ -
ເສັ້ນ, ພະຍາຍາມບາງສິ່ງບາງຢ່າງເຊັ່ນນີ້:

> perl -d my_cgi.pl -nodebug

ແນ່ນອນ CGI ແລະ perlfaq9 ຈະບອກທ່ານເພີ່ມເຕີມ.

GUIs


ການໂຕ້ຕອບເສັ້ນຄໍາສັ່ງແມ່ນປະສົມປະສານຢ່າງແຫນ້ນຫນາກັບ an emacs ການ​ຂະ​ຫຍາຍ​ແລະ​ມີ​ vi
ການໂຕ້ຕອບເຊັ່ນດຽວກັນ.

ທ່ານບໍ່ຈໍາເປັນຕ້ອງເຮັດທັງຫມົດນີ້ຢູ່ໃນເສັ້ນຄໍາສັ່ງ, ເຖິງແມ່ນວ່າ, ມີທາງເລືອກ GUI ຈໍານວນຫນ້ອຍອອກ
ຢູ່ທີ່ນັ້ນ. ສິ່ງທີ່ດີກ່ຽວກັບການເຫຼົ່ານີ້ແມ່ນທ່ານສາມາດໂບກຫນູຜ່ານຕົວແປແລະ dump ຂອງ
ຂໍ້​ມູນ​ຂອງ​ມັນ​ຈະ​ປາ​ກົດ​ຢູ່​ໃນ​ປ່ອງ​ຢ້ຽມ​ທີ່​ເຫມາະ​ສົມ​, ຫຼື​ໃນ​ປູມ​ເປົ້າ​ປະ​ກອບ​, ບໍ່​ມີ​ຄວາມ​ເມື່ອຍ​ຫຼາຍ​
ການພິມ 'x $varname' :-)

ໂດຍສະເພາະມີການລ່າສັດປະມານດັ່ງຕໍ່ໄປນີ້:

ptkdb wrapper ອີງໃສ່ perlTK ສໍາລັບຕົວດີບັກໃນຕົວ

ddd ຂໍ້ມູນການສະແດງຜົນດີບັກ

PerlDevKit ແລະ PerlBuilder ແມ່ນ NT ສະເພາະ

NB. (ຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບສິ່ງເຫຼົ່ານີ້ ແລະອັນອື່ນໆຈະໄດ້ຮັບການຍົກຍ້ອງ).

ບົດສະຫຼຸບ


ພວກເຮົາໄດ້ເຫັນວິທີການຊຸກຍູ້ການປະຕິບັດການຂຽນລະຫັດທີ່ດີກັບ ການນໍາໃຊ້ ຢ່າງເຄັ່ງຄັດ ແລະ -w. ພວກເຮົາສາມາດດໍາເນີນການໄດ້
perl debugger perl -d ຊື່ສະຄຣິບ ເພື່ອກວດກາຂໍ້ມູນຂອງທ່ານຈາກພາຍໃນ perl debugger ກັບ
ໄດ້ p ແລະ x ຄໍາສັ່ງ. ທ່ານສາມາດຍ່າງຜ່ານລະຫັດຂອງທ່ານ, ກໍານົດຈຸດຢຸດດ້ວຍ b ແລະຂັ້ນຕອນ
ໂດຍ​ຜ່ານ​ລະ​ຫັດ​ທີ່​ມີ​ s or n, ສືບຕໍ່ກັບ c ແລະກັບຄືນຈາກການຍ່ອຍທີ່ມີ r. ຍຸຕິທຳ
ສິ່ງທີ່ intuitive ໃນເວລາທີ່ທ່ານລົງໄປຫາມັນ.

ແນ່ນອນ, ມີຫຼາຍສິ່ງຫຼາຍຢ່າງເພື່ອຊອກຮູ້ກ່ຽວກັບ, ມັນໄດ້ຂູດພື້ນຜິວ. ໄດ້
ວິທີທີ່ດີທີ່ສຸດທີ່ຈະຮຽນຮູ້ເພີ່ມເຕີມແມ່ນການໃຊ້ perldoc ເພື່ອຊອກຫາເພີ່ມເຕີມກ່ຽວກັບພາສາ, ອ່ານ
ການຊ່ວຍເຫຼືອອອນໄລນ໌ (perldebug ອາດຈະເປັນບ່ອນຕໍ່ໄປທີ່ຈະໄປ), ແລະແນ່ນອນ, ການທົດລອງ.

ໃຊ້ perldebtut ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net


ເຊີບເວີ ແລະສະຖານີເຮັດວຽກຟຣີ

ດາວໂຫຼດແອັບ Windows ແລະ Linux

  • 1
    ປຶ້ມ Frappe
    ປຶ້ມ Frappe
    Frappe Books ເປັນແຫຼ່ງຟຣີ ແລະເປີດ
    ຊອບ​ແວ​ການ​ຮັກ​ສາ​ປື້ມ​ບັນ​ທຶກ desktop ວ່າ​
    ງ່າຍ​ດາຍ​ແລະ​ດີ​ອອກ​ແບບ​ທີ່​ຈະ​ນໍາ​ໃຊ້​ໂດຍ​
    ທຸລະກິດຂະໜາດນ້ອຍ ແລະນັກອິດສະລະ. ມັນ...
    ດາວໂຫລດປື້ມ Frappe
  • 2
    Python ຕົວເລກ
    Python ຕົວເລກ
    ຂ່າວ: NumPy 1.11.2 ເປັນການປ່ອຍຄັ້ງສຸດທ້າຍ
    ທີ່ຈະເຮັດໃນ sourceforge. ລໍ້
    ສໍາລັບ Windows, Mac, ແລະ Linux ເຊັ່ນດຽວກັນກັບ
    ການແຈກຢາຍແຫຼ່ງທີ່ເກັບໄວ້ໃນແຟ້ມສາມາດເປັນສີ່...
    ດາວໂຫລດ Numerical Python
  • 3
    CMU Sphinx
    CMU Sphinx
    CMUSphinx ເປັນລໍາໂພງເອກະລາດຂະຫນາດໃຫຍ່
    ການຮັບຮູ້ສຽງເວົ້າຢ່າງຕໍ່ເນື່ອງຂອງຄໍາສັບ
    ປ່ອຍອອກມາພາຍໃຕ້ໃບອະນຸຍາດແບບ BSD. ມັນ​ແມ່ນ
    ຍັງເປັນການເກັບກໍາຂອງເຄື່ອງມືແຫຼ່ງເປີດ ...
    ດາວໂຫລດ CMU Sphinx
  • 4
    PyScripter
    PyScripter
    PyScripter ເປັນ Python ແຫຼ່ງເປີດ
    ສະພາບແວດລ້ອມການພັດທະນາແບບປະສົມປະສານ (IDE)
    ສ້າງຂຶ້ນດ້ວຍຄວາມທະເຍີທະຍານທີ່ຈະກາຍເປັນ
    ແຂ່ງຂັນໃນການເຮັດວຽກກັບ
    ການ​ຄ້າ​ຂ້າ​ພະ​ເຈົ້າ ...
    ດາວໂຫລດ PyScripter
  • 5
    ເກົ່າ Feren OS Repositories
    ເກົ່າ Feren OS Repositories
    ນີ້ແມ່ນບ່ອນເກັບມ້ຽນຢ່າງເປັນທາງການສໍາລັບ
    Feren OS. ເພື່ອເພີ່ມອັນຫຼ້າສຸດ, ໃຫ້ແລ່ນ
    ຄໍາສັ່ງນີ້: (16.04-based) echo
    "ເດບ...
    ດາວໂຫລດ Old Feren OS Repositories
  • 6
    OmegaT - multiplatform CAT tool
    OmegaT - multiplatform CAT tool
    OmegaT ເປັນແຫຼ່ງຟຣີ ແລະເປີດ
    Multiplatform Computer Assisted
    ເຄື່ອງ​ມື​ການ​ແປ​ພາ​ສາ​ທີ່​ມີ​ການ​ຈັບ​ຄູ່ fuzzy​,
    ຫນ່ວຍຄວາມຈໍາການແປພາສາ, ຊອກຫາຄໍາສໍາຄັນ,
    ຄໍາ​ສັບ​ປະ​ດາ​, ແລະ tran ...
    ດາວໂຫລດ OmegaT - multiplatform CAT tool
  • ເພີ່ມເຕີມ »

Linux ຄຳ ສັ່ງ

Ad