เบžเบฒเบชเบฒเบญเบฑเบ‡เบเบดเบ”เบžเบฒเบชเบฒเบเบฃเบฑเปˆเบ‡เปเบญเบชเบ›เบฒเป‚เบเบ™

OnWorks favicon

perlperf - เบญเบญเบ™เบฅเบฒเบเปƒเบ™เบ„เบฅเบฒเบง

เปเบฅเปˆเบ™ perlperf เปƒเบ™ OnWorks เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบŸเบฃเบตเบœเปˆเบฒเบ™ Ubuntu Online, Fedora Online, Windows online emulator เบซเบผเบท MAC OS online emulator

เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡ perlperf เบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป„เบ”เป‰เปƒเบ™ OnWorks เบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™เป‚เบฎเบ”เบ•เบดเป‰เบ‡เบŸเบฃเบตเป‚เบ”เบเปƒเบŠเป‰เบซเบ™เบถเปˆเบ‡เปƒเบ™เบซเบผเบฒเบเบšเปˆเบญเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบญเบญเบ™เป„เบฅเบ™เปŒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป€เบŠเบฑเปˆเบ™ Ubuntu Online, Fedora Online, Windows online emulator เบซเบผเบท MAC OS online emulator

เป‚เบ„เบ‡เบเบฒเบ™:

NAME


perlperf - เป€เบ•เบฑเบเบ™เบดเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡ Perl

เบฅเบฒเบเบฅเบฐเบญเบฝเบ”


เบ™เบตเป‰เปเบกเปˆเบ™เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ•เบฑเบเบ™เบดเบเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™
เบ™เปเบฒเปƒเบŠเป‰เบเบฑเบšเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐเบเบฑเบšเป‚เบ„เบ‡เบเบฒเบ™ perl. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ perl เบซเบผเบฒเบเบ„เบปเบ™เป„เบ”เป‰เบกเบฒ
เบˆเบฒเบเบžเบฒเบชเบฒเบญเบทเปˆเบ™, เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบ„เบงเบฒเบกเบฎเบนเป‰เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ•เบฒเบกเบ„เบงเบฒเบกเป€เบซเบกเบฒเบฐเบชเบปเบก, เบกเบตเบซเบผเบฒเบ
เบ„เบปเบ™เบญเบทเปˆเบ™เป†เบ—เบตเปˆเบญเบฒเบ”เบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบˆเบฒเบเบ•เบปเบงเบŠเบตเป‰เบชเบฐเป€เบžเบฒเบฐ perl เบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™
เบชเบฐเบšเบฑเบš condensed, เบšเบฒเบ‡เบ—เบตเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบกเบฒเบˆเบฒเบ Samurai เบเบตเปˆเบ›เบธเปˆเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบชเบฝเบ‡,
Miyamoto Musashi, เบœเบนเป‰เบ—เบตเปˆเป€เบงเบปเป‰เบฒเบงเปˆเบฒ:

"เบขเปˆเบฒเบกเบตเบชเปˆเบงเบ™เบฎเปˆเบงเบกเปƒเบ™เบเบดเบ”เบˆเบฐเบเปเบฒเบ—เบตเปˆเบšเปเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”"

เปƒเบ™ 1645.

เบžเบฒเบšเบฅเบงเบก


เบšเบฒเบ‡เบ—เบตเบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบ™เบฑเบเบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเป€เบฎเบฑเบ”เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบžเบฐเบเบฒเบเบฒเบกเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ
เบเปˆเบญเบ™เบ—เบตเปˆเป‚เบ„เบ‡เบเบฒเบ™เบˆเบฐเป€เบฎเบฑเบ”เบซเบเบฑเบ‡เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ” - เบ™เบตเป‰เปเบกเปˆเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบšเปเปˆเบ”เบต. เบšเปเปˆเบกเบตเบˆเบธเบ”เบขเบนเปˆเปƒเบ™
เบกเบตเป‚เบ„เบ‡เบเบฒเบ™เป„เบงเบ—เบตเปˆเบชเบธเบ”เบ—เบตเปˆเบšเปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ. เบงเบฝเบเบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป€เบญเบปเบฒเป‚เบ„เบ‡เบเบฒเบ™
เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡ เป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡ เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”, (เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบเปˆเบฒเบงโ€‹เป€เบ–เบดเบ‡โ€‹เบเบฒเบ™โ€‹เบฎเบฑเบšโ€‹เบ›เบฐโ€‹เบเบฑเบ™โ€‹เบŠเบธเบ”โ€‹เบเบฒเบ™โ€‹เบ—เบปเบ”โ€‹เบชเบญเบšโ€‹เปเบกเปˆเบ™โ€‹เบขเปˆเบฒเบ‡โ€‹เป€เบ•เบฑเบกโ€‹เบ—เบตเปˆโ€‹
functional), เปเบฅเบฐเบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบžเบทเปˆเบญเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒ optimizing เบกเบฑเบ™. เบกเบตเบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบ—เบตเปˆเบˆเบฐเป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง
เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ, เบกเบตเบซเบผเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเปเบ•เปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบžเบฒเบเปƒเบ™
เบเบฑเบšเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ”เป†.

ONE เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต เบ‚เป‰เบฒเบ‡เบ—เบฒเบ‡
เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบ—เปˆเบฒเบ™ เบˆเบณ เป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ เบเบณ เบ™เบปเบ”เป€เบงเบฅเบฒเบžเบทเป‰เบ™เบ–เบฒเบ™ เบชเบณ เบฅเบฑเบšเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบกเบตเบขเบนเปˆ, เป€เบŠเบดเปˆเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบงเบฅเบฒ
เบกเบตเบ„เบงเบฒเบกเปœเป‰เบฒเป€เบŠเบทเปˆเบญเบ–เบท เปเบฅเบฐ เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบŠเป‰เบณเป„เบ”เป‰. เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰ "Benchmark" เบซเบผเบท
เป‚เบกเบ”เบนเบ™ "Devel::NYTProf", เบซเบผเบทเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™, เบชเปเบฒเบฅเบฑเบšเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰, เบซเบผเบทเบšเบฒเบ‡เบ—เบตเบฅเบฐเบšเบปเบš Unix.
"เป€เบงเบฅเบฒ" เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”, เบญเบฑเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบกเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก. เป€เบšเบดเปˆเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰เบชเปเบฒเบฅเบฑเบšเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ—เบตเปˆเบเบฒเบงเบเบงเปˆเบฒ
เบ‚เบญเบ‡ benchmarking เปเบฅเบฐเป‚เบกเบ”เบนเบ™ profileing, เปเบฅเบฐเปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบญเปˆเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก.

ONE เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต FORWARD
เบ•เปเปˆเป„เบ›, เป„เบ”เป‰เบเบงเบ”เบเบฒเป‚เบ„เบ‡เบเบฒเบ™เบชเปเบฒเบฅเบฑเบš เบฎเป‰เบญเบ™ เบˆเบธเบ”เบ•เปˆเบฒเบ‡เป†, (เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเบฅเบฐเบซเบฑเบ”เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™
เบŠเป‰เบฒ), เบ›เปˆเบฝเบ™เบฅเบฐเบซเบฑเบ”เบ”เป‰เบงเบเบ„เบงเบฒเบกเบ•เบฑเป‰เบ‡เปƒเบˆเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เปเบฅเปˆเบ™เป„เบงเบ‚เบถเป‰เบ™. เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบชเบฐโ€‹เบšเบฑเบšโ€‹
เบŠเบญเบšโ€‹เปเบงโ€‹เบเบฒเบ™โ€‹เบ„เบงเบšโ€‹เบ„เบธเบกโ€‹, เป€เบŠเบฑเปˆเบ™โ€‹: "เบเบฒเบ™โ€‹เป‚เบ„เปˆเบ™โ€‹เบฅเบปเป‰เบกโ€‹" เบˆเบฐโ€‹เบฎเบฑเบšโ€‹เบ›เบฐโ€‹เบเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เบ—เบตเปˆโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เป„เบ”เป‰โ€‹. เบกเบฑเบ™เบ„เบทเบเบฑเบ™
เบ‡เปˆเบฒเบเบ—เบตเปˆเบˆเบฐ fiddle เบ—เบตเปˆเบ™เบตเป‰เปเบฅเบฐ fiddle เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™ - เบขเปˆเบฒเบ›เปˆเบฝเบ™เปเบ›เบ‡เบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบซเบผเบทเบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐ
เบšเปเปˆเบ„เบปเป‰เบ™เบžเบปเบšเบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เปƒเบ” เบเปเปˆ เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เบŠเป‰เบฒ.

เบ„เบปเบ™เบญเบทเปˆเบ™ เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบต เบ‚เป‰เบฒเบ‡เบ—เบฒเบ‡
เบกเบฑเบ™เบšเปเปˆเบžเบฝเบ‡เบžเปเบ—เบตเปˆเบˆเบฐเป€เบงเบปเป‰เบฒเบงเปˆเบฒ: "เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เปเบฅเปˆเบ™เป„เบง", เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบงเบ”เป€เบšเบดเปˆเบ‡เบกเบฑเบ™. เปเบฅเปˆเบ™เบ„เบทเบ™เปƒเปเปˆ
เบฅเบฐเบซเบฑเบ”เบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ‚เบญเบ‡ benchmarking เบซเบผเบทเป‚เบกเบ”เบนเบ™ profileing, เบˆเบฒเบเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡,
เปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เปƒเบซเบกเปˆเป„เบ”เป‰เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ เบ”เบฝเบงเบเบฑเบ™ เบงเบฝเบเบ‡เบฒเบ™ in เบซเบ™เป‰เบญเบ เบ—เบตเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒ. เบŠเปˆเบงเบโ€‹เบ›เบฐโ€‹เบขเบฑเบ”โ€‹เบเบฒเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹เปเบฅเบฐโ€‹
เบŠเป‰เบณ...

เบ—เบปเปˆเบงเป„เบ› GUIDELINES


เบชเบดเปˆเบ‡เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบˆเบทเปˆเบˆเปเบฒเบงเปˆเบฒเบšเปเปˆเบกเบตเบชเบดเปˆเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบ›เบฑเบ™
"Golden Bullet", เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบšเปเปˆเบกเบตเบเบปเบ”เบฅเบฐเบšเบฝเบš, เบžเบฝเบ‡เปเบ•เปˆเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ.

เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบฅเบฐเบซเบฑเบ” inline เบˆเบฐเป„เบงเบเบงเปˆเบฒเบเบฒเบ™เป€เบญเบตเป‰เบ™เปเบšเบš subroutine เบซเบผเบทเบงเบดเบ—เบตเบเบฒเบ™,
เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบซเบ™เป‰เบญเบ, เปเบ•เปˆเบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เบกเบตเบ‚เปเป‰เป€เบชเบเบ‚เบญเบ‡เบซเบ™เป‰เบญเบ
เบฎเบฑเบเบชเบฒเป„เบ”เป‰เปเบฅเบฐเบกเบฒเปƒเบ™เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบซเบผเบฒเบเบเบงเปˆเบฒเป€เบเบปเปˆเบฒ - เบšเปเปˆเบกเบตเบชเบดเปˆเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบ›เบฑเบ™
เบญเบฒเบซเบฒเบ™เบ—เปˆเบฝเบ‡เบŸเบฃเบต. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบŠเบญเบเบซเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเปƒเบ™เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบ‚เบถเป‰เบ™
เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เป„เบงเป‰เปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡ hash, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบžเบฝเบ‡เปเบ•เปˆเป€เบšเบดเปˆเบ‡เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™
เบเปเบฒเบ™เบปเบ”, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐ loop เบœเปˆเบฒเบ™ array เบ—เบฑเบ‡เบซเบกเบปเบ”เป‚เบ”เบเปƒเบŠเป‰ grep() เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡. เบเปˆเบญเบ()
เบญเบฒเบ”เบˆเบฐ (เบซเบผเบฒเบ) เป„เบงเบเบงเปˆเบฒ grep() เปเบ•เปˆโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เป„เบ”เป‰, เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹เบ—เปˆเบฒเบ™โ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เปเบฅเบโ€‹เบ›เปˆเบฝเบ™โ€‹เป„เบ›โ€‹เบญเบตเบโ€‹เป€เบ—เบทเปˆเบญโ€‹เบซเบ™เบถเปˆเบ‡
เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡. เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบญเบฒเบ”เบกเบตเป€เบชเบฑเป‰เบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒ 0.01 เบ‚เบญเบ‡เบงเบดเบ™เบฒเบ—เบตเป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ™เบฑเป‰เบ™เบ–เป‰เบฒเบ—เปˆเบฒเบ™
เป‚เบ—เบซเบฒเบกเบฑเบ™ 1,000 เป€เบ—เบทเปˆเบญ, เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบญเบฒเบ”เบˆเบฐเบขเบนเปˆเปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™ parsing เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเป„เบŸเบฅเปŒเบ‚เบฐเบซเบ™เบฒเบ”เบเบฒเบ‡เบชเปเบฒเบฅเบฑเบš
เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ—เปˆเบฒเบ™เบกเบตเบเบฒเบ™เบŠเบฑเบเบŠเป‰เบฒ 10 เบงเบดเบ™เบฒเบ—เบตเปเบฅเป‰เบง, เบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบฅเบฐเบซเบฑเบ”เบ”เบฝเบง, เปเบฅเบฐเบ–เป‰เบฒเบ—เปˆเบฒเบ™
เป‚เบ—เบซเบฒเบชเบฒเบเบ™เบฑเป‰เบ™ 100,000 เป€เบ—เบทเปˆเบญ, เป‚เบ„เบ‡เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบˆเบฐเบŠเป‰เบฒเบฅเบปเบ‡เบเบฑเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบšเปเปˆเบ—เบปเบ™เบ—เบฒเบ™.

เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบเปˆเบญเบโ€‹เป€เบ›เบฑเบ™โ€‹เบชเปˆเบงเบ™โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบฅเบฝเบ‡โ€‹เบ‚เบญเบ‡โ€‹เบ—เปˆเบฒเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบญเปเบฒโ€‹เบ™เบฒเบ”โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบชเบดเปˆเบ‡โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบขเปˆเบฒเบ‡โ€‹เปเบ—เป‰โ€‹เบˆเบดเบ‡โ€‹,
เปเบ•เปˆเบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบˆเบฐเบŠเป‰เบฒเบเบงเปˆเบฒเบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡เปƒเบ™ เบ•เบปเบงเบญเบฑเบเบชเบญเบ™ "cmp" เปเบฅเบฐ numeric " <=>" เบ„เบฑเบ”
เบœเบนเป‰เบ›เบฐเบเบญเบšเบเบฒเบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบซเบผเบฒเบ passes เปƒเบ™เป„เบฅเบเบฐเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบ•เบปเบงเบŠเบตเป‰เบงเบฑเบ”เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡
เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบฅเบฝเบ‡โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบกเบฒโ€‹เป€เบ–เบดเบ‡โ€‹เบ›เบฐโ€‹เบชเบดเบ”โ€‹เบ—เบดโ€‹เบžเบฒเบšโ€‹เบซเบผเบฒเบโ€‹เบ‚เบถเป‰เบ™โ€‹, เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ—เบตเปˆโ€‹เบฎเบนเป‰โ€‹เบˆเบฑเบโ€‹เป€เบ›เบฑเบ™ "OMโ€‹" (Orcishโ€‹
Maneuver) เป€เบžเบทเปˆเบญ cache เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒ. เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบ–เบฒเบ™เบ„เบงเบฒเบกเบˆเปเบฒ, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบ”เบต, เบชเบฒเบกเบฒเบ”
เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบŠเป‰เบฒเบฅเบปเบ‡เป‚เบ”เบเบเบฒเบ™เบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบœเปˆเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบชเบญเบ‡เบ„เบฑเป‰เบ‡ - เบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบ„เบฑเป‰เบ‡เบ”เบฝเบง
cache, เปเบฅเบฐเบ„เบฑเป‰เบ‡เบ”เบฝเบงเป€เบžเบทเปˆเบญเบˆเบฑเบ”เบฎเบฝเบ‡เบ‚เปเป‰เบกเบนเบ™. เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ "pack()" เป€เบžเบทเปˆเบญโ€‹เบ”เบถเบ‡โ€‹เบญเบญเบโ€‹เบ„เปเบฒโ€‹เบ–เบฒเบกโ€‹เบเบฒเบ™โ€‹เบ„เบฑเบ”โ€‹เป€เบฅเบทเบญเบโ€‹เบ—เบตเปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹
เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เบเบฒเบ™เบชเป‰เบฒเบ‡เบชเบฒเบเบ”เบฝเบงเป€เบžเบทเปˆเบญเบ›เบฝเบšเบ—เบฝเบš,
เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบซเบผเบฒเบ, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ™เปเบฒเปƒเบŠเป‰เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™, เบฅเบฒเบเบฅเบฑเบเบญเบฑเบเบชเบญเบ™
เปƒเบ™ "c" เปเบฅเบฐเป„เบง, perl "sort()" เบŸเบฑเบ‡เบŠเบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ”, เปเบฅเบฐเป€เบ›เบฑเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡ "GRT"
(Guttman Rossler Transform). เบเบฒเบ™เบ›เบฐเบชเบปเบกเบชเบฒเบเบšเบฒเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เปƒเบซเป‰ "GRT" เบŠเป‰เบฒเบฅเบปเบ‡, เบžเบฝเบ‡เปเบ•เปˆ
เป€เบ›เบฑเบ™โ€‹เบชเบฐโ€‹เบฅเบฑเบšโ€‹เบชเบฑเบšโ€‹เบŠเป‰เบญเบ™โ€‹เบ—เบปเปˆเบ‡โ€‹เบžเบฝเบ‡โ€‹เป€เบเบตเบ™โ€‹เป„เบ›โ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ”เบตโ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹.

เบชเปเบฒเบฅเบฑเบšเปเบญเบฑเบšเบžเบฅเบดเป€เบ„เบŠเบฑเบ™เบ—เบตเปˆเปƒเบŠเป‰ backends เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, namespace "DBIx" เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เป„เบ”เป‰เบžเบฐเบเบฒเบเบฒเบกเบŠเปˆเบงเบ
เบเบฑเบšเบเบฒเบ™เบฎเบฑเบเบชเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆ nippy, เบšเปเปˆเปเบกเปˆเบ™เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบžเบฐเบเบฒเบเบฒเบก เบšเปเปˆ เบชเบญเบšเบ–เบฒเบกเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบปเบ™เบเปˆเบงเบฒ
เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบซเบผเป‰เบฒเบชเบธเบ”, เปเบ•เปˆเบญเปˆเบฒเบ™เป€เบญเบเบฐเบชเบฒเบ™เบ—เบตเปˆเบกเบฒเบžเป‰เบญเบกเบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบฅเบทเบญเบ.
เปƒเบ™เบšเบฑเบ™เบ”เบฒเบšเบฑเบ™เบซเบฒเบซเบผเบฒเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบตเปˆเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ„เบงเบ™เบฅเบฐเบงเบฑเบ‡เปเบกเปˆเบ™
เป€เบžเบทเปˆเบญเปƒเบŠเป‰เบ•เบปเบงเบเบถเบ” "SQL" เบชเบฐเป€เปเบต เปเบฅเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เบเปˆเบญเบ™เบเบฒเบ™เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบกเบทเปˆเบญเบญเบฑเบ™เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐ
เบžเบดโ€‹เบชเบนเบ”โ€‹เป„เบ”เป‰โ€‹เบ›เบฝเบšโ€‹. เบเบฒเบ™เปเบเบเป„เบŸเบฅเปŒเบ‚เบฐเปœเบฒเบ”เปƒเบซเบเปˆเป‚เบ”เบเบเบฒเบ™เบกเบญเบšเปเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบซเบผเบฒเบเบญเบฑเบ™เป€เบžเบทเปˆเบญเบงเบดเป€เบ„เบฒเบฐ
เป„เบŸเบฅเปŒเบ”เบฝเบง, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒ "POE", "เบเบฐเบ—เบนเป‰" เบซเบผเบท "เบชเป‰เบญเบก" เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš.
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™ "CPU" เบ—เบตเปˆเบกเบตเบขเบนเปˆ, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเป€เบ•เบฑเบเบ™เบดเบเบ™เบตเป‰เปเบกเปˆเบ™ fraught เบเบฑเบš
เบšเบฑเบ™โ€‹เบซเบฒโ€‹เบ—เบตเปˆโ€‹เบชเบญเบ”โ€‹เบ„เป‰เบญเบ‡โ€‹เบเบฑเบ™โ€‹เปเบฅเบฐโ€‹เบฎเบฝเบโ€‹เบฎเป‰เบญเบ‡โ€‹เปƒเบซเป‰โ€‹เบกเบตโ€‹เบ„เบงเบฒเบกโ€‹เป€เบญเบปเบฒโ€‹เปƒเบˆโ€‹เปƒเบชเปˆโ€‹เบชเบนเบ‡โ€‹เปƒเบ™โ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹.

เบ—เบธเบเป†เบเปเบฅเบฐเบ™เบตเบกเบตเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเบชเบฐเป€เบžเบฒเบฐเปเบฅเบฐเบ‚เปเป‰เบเบปเบเป€เบงเบฑเป‰เบ™เบซเบ™เบถเปˆเบ‡เบซเบผเบทเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เปเบฅเบฐเบšเปเปˆเบกเบต
เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบซเบ™เบถเปˆเบ‡เปเบฅเบฐเบŠเบญเบเบซเบฒเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบ—เปˆเบฒเบ™
เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบ™เบตเป‰เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบงเปˆเบฒเบเบฒเบ™เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบšเปเปˆเปเบกเปˆเบ™เบงเบดเบ—เบฐเบเบฒเบชเบฒเบ”เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™, เปเบฅเบฐเป€เบ›เบฑเบ™เบซเบเบฑเบ‡
เบžเบงเบเป€เบฎเบปเบฒเบกเบฑเบเปƒเบŠเป‰ Perl เบซเบผเบฒเบ - TMTOWTDI.

เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™


เบ™เบตเป‰เปเบกเปˆเบ™เบšเบฒเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ‚เบญเบ‡ Perl.

เบเบฒเบ™เบกเบญเบš เปเบฒเบ เปเบฅเบฐ เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡ เบ•เบปเบงเปเบ›
เบ‚เป‰เบญเบเปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบชเปˆเบงเบ™เปƒเบซเบเปˆเป„เบ”เป‰เป€เบซเบฑเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ, (เบซเบผเบทเบฎเป‰เบฒเบเปเบฎเบ‡เบเบงเปˆเบฒ), เบ™เบตเป‰:

เบ–เป‰เบฒ ($obj->{_ref}->{_myscore} >= $obj->{_ref}->{_yourscore} ) {
...

เบฅเบฐเบซเบฑเบ”เบ›เบฐเป€เบžเบ”เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบเบฒเบ™เบญเปˆเบฒเบ™เปเบ—เป‰เป†, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ„เบงเบฒเบกเบญเปˆเบญเบ™เป„เบซเบงเบซเบผเบฒเบเบ•เปเปˆเบเบฒเบ™เบžเบดเบกเบœเบดเบ”,
เปเบฅเบฐเบกเบฑเบ™เบˆเบฐเปเบˆเป‰เบ‡เบเบงเปˆเบฒเบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเป€เบชเบ”เบ•เบปเบงเปเบ›เบขเปˆเบฒเบ‡เบˆเบฐเปเบˆเป‰เบ‡. เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบ‚เป‰เบฒเบ‡เบ„เบฝเบ‡ stepping เป„เบ”เป‰
เบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป€เบ•เบฑเบเบ™เบดเบเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบกเปเบšเบšเบงเบฑเบ”เบ–เบธเป€เบžเบทเปˆเบญ encapsulate เบ•เบปเบงเปเบ›
เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป‚เบ”เบเบœเปˆเบฒเบ™เบงเบดเบ—เบตเบเบฒเบ™, เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”เป‰เป‚เบ”เบเบœเปˆเบฒเบ™เบงเบฑเบ”เบ–เบธ. เปƒเบ™โ€‹เบ—เบตเปˆโ€‹เบ™เบตเป‰โ€‹เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ›เบถเบโ€‹เบชเบฒโ€‹เบซเบฒโ€‹เบฅเบทโ€‹
เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบ‚เบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เปเบฅเบฐเบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เบ™เบตเป‰เบกเบตเบœเบปเบ™เบเบฐเบ—เบปเบšเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบชเบฒโ€‹เบกเบฒเบ”
เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡เบ™เบตเป‰, เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเปƒเบ”เป†เป‚เบ”เบเบเบฒเบ™เปƒเบชเปˆเบฅเบฐเบซเบฑเบ”เบ›เบฝเบšเบ—เบฝเบš
เป„เบŸเบฅเปŒเปเบฅเบฐเปเบฅเปˆเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš "Benchmark".

# เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡

#!/usr/bin/perl

เปƒเบŠเป‰เบขเปˆเบฒเบ‡เป€เบ„เบฑเปˆเบ‡เบ„เบฑเบ”;
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเป€เบ•เบทเบญเบ™;

เปƒเบŠเป‰ Benchmark;

$ref เบ‚เบญเบ‡เบ‚เป‰เบญเบ = {
'เบญเป‰เบฒเบ‡เบญเบตเบ‡' => {
_myscore => '100 + 1',
_youscore => '102 - 1' ,
},
};

เป€เบงเบฅเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰(1000000, {
'เป‚เบ”เบเบเบปเบ‡' => เบเปˆเบญเบ {
$x เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $ref->{ref}->{_myscore} . $ref->{ref}->{_youscore} ;
},
'เบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡' => เบเปˆเบญเบ {
$ref เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $ref->{ref};
$myscore เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $ref->{_myscore};
$youscore เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $ref->{_youscore};
$x เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $myscore . $youscore;
},
});

เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบงเบฑเบ”เปเบ—เบเป„เบฅเบเบฐเป€เบงเบฅเบฒเปƒเบ”เบซเบ™เบถเปˆเบ‡เบˆเปเบฒเบ™เบงเบ™เป€เบงเบฅเบฒเบžเบฝเบ‡เบžเปเป€เบžเบทเปˆเบญเปƒเบซเป‰เบ•เบปเบงเป€เบฅเบ
เบ•เบปเบเบฅเบปเบ‡เป€เบ›เบฑเบ™เบ•เบปเบงเป€เบฅเบเบชเบฐเป€เบฅเปˆเบ, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปเบ•เปˆเบฅเบฐเป„เบฅเบเบฐเบˆเบฐเป€เบซเบ™เบฑเบ‡เบ•เบตเบ‡เบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”เบเป‰เบญเบ™
เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบก, เป€เบžเบทเปˆเบญเบซเบผเบธเบ”เบœเปˆเบญเบ™เบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เบญเบ‡เบเบฒเบ™เบ‚เบฑเบ”เปเบเป‰เบ‡เบชเปเบฒเบฅเบฑเบš "CPU" เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เปเบฅเบฐ
เบ•เบปเบงเบขเปˆเบฒเบ‡เปเบšเบ™เบงเบดเบ”เป€เบ„เบทเบญเบ‚เปˆเบฒเบ. เปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ”เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบชเปเบฒเบฅเบฑเบšเบซเบ™เบถเปˆเบ‡เบฅเป‰เบฒเบ™ iterations, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰
เป€เบšเบดเปˆเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เป‚เบ”เบเป‚เบกเบ”เบนเบ™ "Benchmark", เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เปƒเบ”เปเบกเปˆเบ™
เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเบชเบธเบ”.

$> perl dereference

Benchmark: เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ 1000000 iterations of dereference, direct...
dereference: 2 wallclock secs (1.59 usr + 0.00 sys = 1.59 CPU) @ 628930.82/s (n=1000000)
เป‚เบ”เบเบเบปเบ‡: 1 wallclock secs (1.20 usr + 0.00 sys = 1.20 CPU) @ 833333.33/s (n=1000000)

เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เปเบกเปˆเบ™เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™ deferencing เปเบกเปˆเบ™เบŠเป‰เบฒเบเบงเปˆเบฒ. เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบกเบฑเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡
เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ”เบเบชเบฐเป€เบฅเปˆเบเบ‚เบญเบ‡ 628,930 เป€เบ—เบทเปˆเบญเบ•เปเปˆเบงเบดเบ™เบฒเบ—เบตเปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบงเบดเบ—เบตเบเบฒเบ™เป‚เบ”เบเบเบปเบ‡
เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก 204,403 เป€เบ—เบทเปˆเบญ. เปเบ•เปˆเบซเบ™เป‰เบฒเป€เบชเบเบ”เบฒเบ, เบเป‰เบญเบ™เบงเปˆเบฒเบกเบต
เบกเบตเบซเบผเบฒเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ‚เบฝเบ™เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบซเบฒเบ•เบปเบงเปเบ›เป‚เบ”เบเบเบปเบ‡เบซเบผเบฒเบเบŠเบฑเป‰เบ™, เปเบฅเบฐ
เบ›เบปเบเบเบฐเบ•เบดเปเบฅเป‰เบงเบกเบฑเบ™เป€เบ›เบฑเบ™เบ•เบฒเบขเป‰เบฒเบ™. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบกเบฑเบ™เปเบกเปˆเบ™เบซเบ™เป‰เบญเบเป„เบง. เบ„เปเบฒเบ–เบฒเบกเบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆเบšเปเปˆเบงเปˆเบฒ
เบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ™เบฒเบ—เบตเปเบกเปˆเบ™เบ„เบธเป‰เบกเบ„เปˆเบฒเบเบฑเบšเบชเบฒเบเบ•เบฒ, เบซเบผเบทเบเบฒเบ™เบชเบนเบ™เป€เบชเบเบเบฒเบ™เบฎเบฑเบเบชเบฒ.

เบ„เบปเป‰เบ™เบซเบฒ เปเบฅเบฐ เบ—เบปเบ”เปเบ—เบ™ or tr
เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบฐเบ•เบฃเบดเบ‡เบ—เบตเปˆเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เปเบเป‰เป„เบ‚, เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ regex เป€เบเบทเบญเบšเบชเบฐเป€เบซเบกเบตเบˆเบฐเบกเบตเบซเบผเบฒเบ
เบกเบตเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™เบซเบผเบฒเบ, "tr", เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบฅเบทเป‰เบญเบเป†, เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”. เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบซเบ™เบถเปˆเบ‡เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™
เปเบ—เบ™เบ—เบตเปˆ vowels เบ—เบฑเบ‡เบซเบกเบปเบ”เบ”เป‰เบงเบเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบญเบทเปˆเบ™. เบเบฒเบ™เปเบเป‰เป„เบ‚ regex เบญเบฒเบ”เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰:

$str =~ s/[aeiou]/x/g

เบ—เบฒเบ‡เป€เบฅเบทเบญเบ "tr" เบญเบฒเบ”เบˆเบฐเป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบ™เบตเป‰:

$str =~ tr/aeiou//

เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบญเบปเบฒเบกเบฑเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป„เบŸเบฅเปŒเบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบงเบดเบ—เบตเบเบฒเบ™เปƒเบ”เป„เบงเบ—เบตเปˆเบชเบธเบ”,
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ•เบปเบงเปเบ› $STR เบ—เบปเปˆเบงเป‚เบฅเบเป€เบžเบทเปˆเบญเบเปเบฒเบซเบ™เบปเบ”เปƒเบซเป‰เบ•เบปเบงเปเบ› "my $str" เป€เบžเบทเปˆเบญเบซเบผเบตเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™ perl
เบžเบฐเบเบฒเบเบฒเบกเบ›เบฑเบšเบ›เบธเบ‡เบงเบฝเบเบ‡เบฒเบ™เปƒเบ”เบ™เบถเปˆเบ‡เปƒเบซเป‰เป€เปเบฒเบฐเบชเบปเบกเป‚เบ”เบเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒเบกเบฑเบ™เบ–เบทเบเบกเบญเบšเปเบฒเบเปƒเบซเป‰เบžเบฝเบ‡เบ„เบฑเป‰เบ‡เบ”เบฝเบงเป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™.

# regex-เปเบ›

#!/usr/bin/perl

เปƒเบŠเป‰เบขเปˆเบฒเบ‡เป€เบ„เบฑเปˆเบ‡เบ„เบฑเบ”;
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเป€เบ•เบทเบญเบ™;

เปƒเบŠเป‰ Benchmark;

$STR เบ‚เบญเบ‡เบ‚เป‰เบญเบ = "$$- this and that";

เป€เบงเบฅเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰(1000000, {
'sr' => เบเปˆเบญเบ { เบ‚เบญเบ‡เบ‚เป‰เบญเบ $str = $STR; $str =~ s/[aeiou]/x/g; เบเบฑเบšเบ„เบทเบ™ $str; },
'tr' => เบเปˆเบญเบ {เบ‚เบญเบ‡เบ‚เป‰เบญเบ $str = $STR; $str =~ tr/aeiou//; เบเบฑเบšเบ„เบทเบ™ $str; },
});

เปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ”เปƒเบซเป‰เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ:

$> perl regex-transliterate

Benchmark: เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ 1000000 iterations of sr, tr...
sr: 2 wallclock secs (1.19 usr + 0.00 sys = 1.19 CPU) @ 840336.13/s (n=1000000)
tr: 0 wallclock secs (0.49 usr + 0.00 sys = 0.49 CPU) @ 2040816.33/s (n=1000000)

เบชเบฐเบšเบฑเบš "tr" เปเบกเปˆเบ™เบœเบนเป‰เบŠเบฐเบ™เบฐเบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™. เบเบฒเบ™เปเบเป‰เป„เบ‚เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบเบทเบ”เบซเบเบธเปˆเบ™, เบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เปเบกเปˆเบ™เป„เบง - เปเบฅเบฐ
เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เบเบฒเบ™โ€‹เป€เบฅเบทเบญเบโ€‹เบ—เบตเปˆโ€‹เป€เบซเบกเบฒเบฐโ€‹เบชเบปเบกโ€‹เบ‚เบญเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹.

เบเบงเบ”เป€เบšเบดเปˆเบ‡เป€เบญเบเบฐเบชเบฒเบ™ "Benchmark" เบชเปเบฒเบฅเบฑเบšเป€เบ•เบฑเบเบ™เบดเบเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบ•เบทเปˆเบกเบญเบตเบ.

เบเบฒเบ™เบ›เบฐเบเบญเบšเบ‚เปเป‰เบกเบนเบ™ เป€เบ„เบทเปˆเบญเบ‡เบกเบท


เบฅเบฐเบซเบฑเบ”เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเป€เบฅเบฑเบเบ™เป‰เบญเบเบˆเบฐเบชเบฐเบซเบ™เบญเบ‡เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆ profiler เบชเบฒเบกเบฒเบ”เบœเบฐเบฅเบดเบ”เป„เบ”เป‰
เบชเบฐเบ–เบดเบ•เบดเบเบฒเบ™เบฅเบฒเบเบ‡เบฒเบ™เบ—เบตเปˆเบเบงเป‰เบฒเบ‡เบ‚เบงเบฒเบ‡เบเบงเปˆเบฒ. เบ•เบปเบงเบขเปˆเบฒเบ‡เบ™เบตเป‰เปƒเบŠเป‰เป‚เบ„เบ‡เบเบฒเบ™ "wordmatch" เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ
เป€เบŠเบดเปˆเบ‡ parses เป„เบŸเบฅเปŒเบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบซเป‰เปเบฅเบฐ spews เบญเบญเบเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบชเบฑเป‰เบ™เบเปˆเบฝเบงเบเบฑเบšเป€เบ™เบทเป‰เบญเปƒเบ™.

# เบ„เบณเบชเบฑเบš

#!/usr/bin/perl

เปƒเบŠเป‰เบขเปˆเบฒเบ‡เป€เบ„เบฑเปˆเบ‡เบ„เบฑเบ”;
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเป€เบ•เบทเบญเบ™;

=head1 NAME

filewords - เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ„เปเบฒเบชเบฑเบšเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™

=head1 เบชเบฐเบซเบผเบธเบšเบชเบฑเบ‡เบฅเบงเบก

filewords -f inputfilename [-d]

=head1 เบฅเบฒเบเบฅเบฐเบญเบฝเบ”

เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ™เบตเป‰โ€‹เบญเบฐโ€‹เบ™เบธโ€‹เบเบฒเบ”โ€‹เบŠเบทเปˆโ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹, เบฅเบฐโ€‹เบšเบธโ€‹เป„เบงเป‰โ€‹เบ”เป‰เบงเบ C<-fโ€‹>โ€‹, เปเบฅเบฐโ€‹เบชเบฐโ€‹เปเบ”เบ‡ aโ€‹
เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบ‡เปˆเบฒเบเบ”เบฒเบเบ‚เบญเบ‡เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบ—เบตเปˆเบžเบปเบšเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เบ™เบฑเป‰เบ™. เปƒเบŠเป‰เบ›เบธเปˆเบก C<-d> เป€เบžเบทเปˆเบญเป€เบ›เบตเบ”เปƒเบŠเป‰เบ‡เบฒเบ™
เปเบเป‰เบšเบฑเบ™เบซเบฒเบ‚เปเป‰เบ„เบงเบฒเบก.

= เบ•เบฑเบ”

เปƒเบŠเป‰ FileHandle;
เปƒเบŠเป‰ Getopt::Long;

$debug เบ‚เบญเบ‡เบ‚เป‰เบญเบ = 0;
$file เบ‚เบญเบ‡เบ‚เป‰เบญเบ = '';

$result เบ‚เบญเบ‡เบ‚เป‰เบญเบ = GetOptions (
'เบ”เบตเบšเบฑเบ' => \$debug,
'file=s' => \$file,
);
die("args เบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡") เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆ $result;

เป€เบงเบฑเป‰เบ™เป€เบชเบเปเบ•เปˆ ( -f $file ) {
die("Usage: $0 -f filename [-d]");
}
เบ‚เบญเบ‡เบ‚เป‰เบญเบ $FH = FileHandle->new("< $file") เบซเบผเบท die("เบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ”เป„เบŸเบฅเปŒ($file): $!");

$i_LINES เบ‚เบญเบ‡เบ‚เป‰เบญเบ = 0;
$i_WORDS เบ‚เบญเบ‡เบ‚เป‰เบญเบ = 0;
%count = ();

@lines เบ‚เบญเบ‡เบ‚เป‰เบญเบ = <$FH>;
foreach my $line (@lines ) {
$i_LINES++;
$line =~ s/\n//;
my @words = เปเบเบ(/ +/, $line);
$i_words เบ‚เบญเบ‡เบ‚เป‰เบญเบ = scalar(@words);
$i_WORDS = $i_WORDS + $i_words;
debug("line: $i_LINES เบชเบฐเปœเบญเบ‡ $i_words words: @words");
$i_word เบ‚เบญเบ‡เบ‚เป‰เบญเบ = 0;
foreach my $word ( @words ) {
$i_word++;
$count{$i_LINES}{spec} += matches($i_word, $word, '[^a-zA-Z0-9]');
$count{$i_LINES}{only} += matches($i_word, $word, '^[^a-zA-Z0-9]+$');
$count{$i_LINES}{cons} += matches($i_word, $word, '^[(?i:bcdfghjklmnpqrstvwxyz)]+$');
$count{$i_LINES}{vows} += matches($i_word, $word, '^[(?i:aeiou)]+$');
$count{$i_LINES}{caps} += matches($i_word, $word, '^[(AZ)]+$');
}
}

เบžเบดเบกเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™(%เบ™เบฑเบš);

เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบเปˆเบญเบ {
$i_wd เบ‚เบญเบ‡เบ‚เป‰เบญเบ = shift;
my $word = shift;
$regex เบ‚เบญเบ‡เบ‚เป‰เบญเบ = shift;
เบ‚เบญเบ‡เบ‚เป‰เบญเบ $ has = 0;

เบ–เป‰เบฒ ($word =~ /($regex)/ ) {
$ has++ เบ–เป‰เบฒ $1;
}

debug("เบ„เบณเบชเบฑเบš: $i_wd ".($has ? 'match' : 'เบšเปเปˆเบเบปเบ‡เบเบฑเบ™')." chars: /$regex/");

เบเบฑเบšเบ„เบทเบ™ $ has;
}

เบšเบปเบ”โ€‹เบฅเบฒเบโ€‹เบ‡เบฒเบ™โ€‹เบเปˆเบญเบ {
เบฅเบฒเบเบ‡เบฒเบ™ % เบ‚เบญเบ‡เบ‚เป‰เบญเบ = @_;
%rep เบ‚เบญเบ‡เบ‚เป‰เบญเบ;

foreach my $line (เบเบฐเปเบˆ %report ) {
foreach $key เบ‚เบญเบ‡เบ‚เป‰เบญเบ (เบเบฐเปเบˆ %{ $report{$line} } ) {
$rep{$key} += $report{$line}{$key};
}
}

$ เบฅเบฒเบเบ‡เบฒเบ™เบ‚เบญเบ‡เบ‚เป‰เบญเบ = qq|
เบฅเบฒเบเบ‡เบฒเบ™ $0 เบชเปเบฒเบฅเบฑเบš $file:
เปเบ–เบงเปƒเบ™เป„เบŸเบฅเปŒ: $i_LINES
เบ„เปเบฒเบ—เบตเปˆเบขเบนเปˆเปƒเบ™เป„เบŸเบฅเปŒ: $i_WORDS
เบ„เปเบฒเบ—เบตเปˆเบกเบตเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบžเบดเป€เบชเบ” (เบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒ): $i_spec
เบ„เปเบฒเบ—เบตเปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบ•เบปเบงเบญเบฑเบเบชเบญเบ™เบžเบดเป€เบชเบ” (เบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒ): $i_only
เบ„เบณเบชเบฑเบšเบ—เบตเปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบžเบฐเบเบฑเบ™เบŠเบฐเบ™เบฐ: $i_cons
เบ„เปเบฒเบ—เบตเปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบ•เบปเบงเบžเบดเบกเปƒเบซเบเปˆ: $i_caps
เบ„เปเบฒเบ—เบตเปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆ vowels: $i_vows
|;

เบเบฑเบšเบ„เบทเบ™ $report;
}

เปเบเป‰เบšเบฑเบ™เบซเบฒเบเปˆเบญเบ {
my $message = shift;

เบ–เป‰เบฒ ( $debug ) {
เบžเบดเบก STDERR "DBG: $message\n";
}
}

เบญเบญเบเบˆเบฒเบ 0;

เบžเบฑเบ”เบ—เบฐเบ™เบฒ::DProf
เป‚เบกเบ”เบนเบ™เบ—เบตเปˆเป€เบ„เบปเบฒเบฅเบปเบšเบ™เบตเป‰เป€เบ›เบฑเบ™เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™ de-facto เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบฅเบฐเบซเบฑเบ” Perl เบชเปเบฒเบฅเบฑเบšเบซเบผเบฒเบเบเปˆเบงเบฒ
เบ—เบปเบ”เบชเบฐเบงเบฑเบ”, เปเบ•เปˆเป„เบ”เป‰เบ–เบทเบเบ›เปˆเบฝเบ™เปเบ—เบ™เบ”เป‰เบงเบเป‚เบกเบ”เบนเบ™เบญเบทเปˆเบ™เป†เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเป„เบ”เป‰เบ™เปเบฒเบžเบงเบเป€เบฎเบปเบฒเบเบฑเบšเบ„เบทเบ™เป„เบ›เบšเปˆเบญเบ™
เบชเบฐเบ•เบฐเบงเบฑเบ”เบ—เบต 21. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เปเบ™เบฐเบ™เปเบฒเปƒเบซเป‰เบ›เบฐเป€เบกเบตเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบˆเบฒเบเบซเบผเบฒเบเป†เบขเปˆเบฒเบ‡
เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เปเบฅเบฐเบˆเบฒเบเบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆ CPAN เบขเบนเปˆเปƒเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰, (เปเบฅเบฐเบ›เบฐเบˆเบธเบšเบฑเบ™
Devel::NYTProf เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบญเบฒเบงเบธเบ”เบ‚เบญเบ‡เบ—เบฒเบ‡เป€เบฅเบทเบญเบ - เป€เบšเบดเปˆเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰), เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบขเปˆเบฒเบ‡เป„เบงเบงเบฒ
เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบ Devel::DPF เบ—เปเบฒเบญเบดเบ”, เป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เบชเปเบฒเบฅเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบท Perl profile. เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™
เป‚เบ„เบ‡เบเบฒเบ™เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡เบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ„เบงเบšเบ„เบธเบกเบ‚เบญเบ‡ "Devel::DPF" เป‚เบ”เบเปƒเบŠเป‰เบ›เบธเปˆเบก "-d" เปƒเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡
เป€เบชเบฑเป‰เบ™.

$> perl -d:DProf wordmatch -f perl5db.pl

<...เบซเบผเบฒเบเป€เบชเบฑเป‰เบ™เบ–เบทเบเบ•เบฑเบ”เบญเบญเบ...>

เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™ wordmatch เบชเปเบฒเบฅเบฑเบš perl5db.pl:
เป€เบชเบฑเป‰เบ™โ€‹เปƒเบ™โ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™โ€‹: 9428โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เปƒเบ™โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹: 50243โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ•เบปเบงโ€‹เบญเบฑเบโ€‹เบชเบญเบ™โ€‹เบžเบดโ€‹เป€เบชเบ” (เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบ„เปเบฒโ€‹)โ€‹: 20480โ€‹
เบ„เปเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ•เบปเบงโ€‹เบญเบฑเบโ€‹เบชเบญเบ™โ€‹เบžเบดโ€‹เป€เบชเบ” (เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบ„เปเบฒโ€‹)โ€‹: 7790โ€‹
เบ„เบณเบชเบฑเบšเบ—เบตเปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบžเบฐเบเบฑเบ™เบŠเบฐเบ™เบฐ: 4801
เบ„เปเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ•เบปเบงโ€‹เบžเบดเบกโ€‹เปƒเบซเบเปˆโ€‹: 1316โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆ vowelsโ€‹: 1701โ€‹

"Devel::DPF" เบœเบฐเบฅเบดเบ”เป„เบŸเบฅเปŒเบžเบดเป€เบชเบ”, เป€เบญเบตเป‰เบ™เบงเปˆเบฒ tmon.out เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เปเบฅเบฐเป„เบŸเบฅเปŒเบ™เบตเป‰เบ–เบทเบเบญเปˆเบฒเบ™
เป‚เบ”เบเป‚เบ„เบ‡เบเบฒเบ™ "dprofpp", เป€เบŠเบดเปˆเบ‡เป„เบ”เป‰เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เปเบฅเป‰เบงเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡ "Devel::DPF"
เบเบฒเบ™โ€‹เปเบœเปˆโ€‹เบเบฐโ€‹เบˆเบฒเบโ€‹. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป‚เบ—เบซเบฒ "dprofpp" เป‚เบ”เบเบšเปเปˆเบกเบตเบ—เบฒเบ‡เป€เบฅเบทเบญเบ, เบกเบฑเบ™เบˆเบฐเบญเปˆเบฒเบ™เบ‚เปเป‰เบ„เบงเบฒเบก tmon.out เบเบทเปˆเบ™เปƒเบ™
เป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™เปเบฅเบฐเบœเบฐเบฅเบดเบ”เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบชเบฐเบ–เบดเบ•เบดเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰เบ‚เบญเบ‡เบกเบฐเบ™เบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เบ—เปˆเบฒเบ™
เป‚เบ„เบ‡เบเบฒเบ™. เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ.

$> dprofpp

เป€เบงเบฅเบฒเบœเปˆเบฒเบ™เป„เบ›เบ—เบฑเบ‡เปเบปเบ” = 2.951677 เบงเบดเบ™เบฒเบ—เบต
เป€เบงเบฅเบฒเบœเบนเป‰เปƒเบŠเป‰+เบฅเบฐเบšเบปเบš = 2.871677 เบงเบดเบ™เบฒเบ—เบต
เป€เบงเบฅเบฒเบžเบดเป€เบชเบ”
%Time ExclSec CumulS #Calls sec/call Csec/c เบŠเบทเปˆ
102. 2.945 3.003 251215 0.0000 0.0000 เบซเบผเบฑเบ:: matches
2.40 0.069 0.069 260643 0.0000 0.0000 เบซเบผเบฑเบ::debug
1.74 0.050 0.050 1 0.0500 0.0500 เบซเบผเบฑเบ:: เบฅเบฒเบเบ‡เบฒเบ™
1.04 0.030 0.049 4 0.0075 0.0123 เบซเบผเบฑเบ::BEGIN
0.35 0.010 0.010 3 0.0033 0.0033 เบœเบนเป‰เบชเบปเปˆเบ‡เบญเบญเบ::as_heavy
0.35 0.010 0.010 7 0.0014 0.0014 IO::File::BEGIN
0.00 - -0.000 1 - - Getopt::Long::FindOption
0.00 - -0.000 1 - - เบชเบฑเบ™เบเบฒเบฅเบฑเบ::BEGIN
0.00 - -0.000 1 - - Fcntl::BEGIN
0.00 - -0.000 1 - - Fcntl::bootstrap
0.00 - -0.000 1 - - เบเบฒเบ™เป€เบ•เบทเบญเบ™เป„เบž::BEGIN
0.00 - -0.000 1 - - IO::bootstrap
0.00 - -0.000 1 - - Getopt::Long::ConfigDefaults
0.00 - -0.000 1 - - Getopt::Long::Configure
0.00 - -0.000 1 - - เบชเบฑเบ™เบเบฒเบฅเบฑเบ::gensym

"dprofpp" เบˆเบฐเบœเบฐเบฅเบดเบ”เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ—เบตเปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบเบดเบ”เบˆเบฐเบเปเบฒเบ‚เบญเบ‡ "wordmatch"
เป‚เบ„เบ‡เบเบฒเบ™. เป‚เบกเบ‡เบ›เบธเบ, เบœเบนเป‰เปƒเบŠเป‰เปเบฅเบฐเบฅเบฐเบšเบปเบš, เป€เบงเบฅเบฒเปเบกเปˆเบ™เบขเบนเปˆเป€เบ—เบดเบ‡เบชเบธเบ”เบ‚เบญเบ‡เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐ, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบ
เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฅเปเบฒเบ•เบปเป‰เบ™เบ•เปเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™. เบเบงเบ”เป€เบšเบดเปˆเบ‡เป€เบญเบเบฐเบชเบฒเบ™ "dprofpp" เบชเปเบฒเบฅเบฑเบš
เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบซเบผเบฒเบเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเบกเบฑเบ™เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™.

เป€เบšเบดเปˆเบ‡ "Apache::DPF" เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ "Devel::DPF" เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ "mod_perl".

เบžเบฑเบ”เบ—เบฐเบ™เบฒ::Profileer
เบฅเบญเบ‡เบกเบฒเป€เบšเบดเปˆเบ‡เป‚เบ›เบฃเปเบเบฃเบกเบ”เบฝเบงเบเบฑเบ™เป‚เบ”เบเปƒเบŠเป‰เป‚เบ›เป„เบŸเป€เบŠเบตเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™: "Devel::Profiler", a
เบเบฒเบ™เบซเบผเบธเบ”เบฅเบปเบ‡เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เปเบ—เบ™ Perl เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™เบชเปเบฒเบฅเบฑเบš "Devel::DPF". เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเปƒเบ™
เบงเปˆเบฒเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบ—เบธเบ‡ "-d:" เบžเบดเป€เบชเบ”, เบ—เปˆเบฒเบ™เบ”เบถเบ‡ "Devel::Profiler" เป‚เบ”เบเบเบปเบ‡เป€เบ›เบฑเบ™.
เป‚เบกเบ”เบนเบ™เป‚เบ”เบเปƒเบŠเป‰ "-M".

$> perl -MDevel::Profileer wordmatch -f perl5db.pl

<...เบซเบผเบฒเบเป€เบชเบฑเป‰เบ™เบ–เบทเบเบ•เบฑเบ”เบญเบญเบ...>

เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™ wordmatch เบชเปเบฒเบฅเบฑเบš perl5db.pl:
เป€เบชเบฑเป‰เบ™โ€‹เปƒเบ™โ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™โ€‹: 9428โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เปƒเบ™โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹: 50243โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ•เบปเบงโ€‹เบญเบฑเบโ€‹เบชเบญเบ™โ€‹เบžเบดโ€‹เป€เบชเบ” (เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบ„เปเบฒโ€‹)โ€‹: 20480โ€‹
เบ„เปเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ•เบปเบงโ€‹เบญเบฑเบโ€‹เบชเบญเบ™โ€‹เบžเบดโ€‹เป€เบชเบ” (เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบ„เปเบฒโ€‹)โ€‹: 7790โ€‹
เบ„เบณเบชเบฑเบšเบ—เบตเปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบžเบฐเบเบฑเบ™เบŠเบฐเบ™เบฐ: 4801
เบ„เปเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ•เบปเบงโ€‹เบžเบดเบกโ€‹เปƒเบซเบเปˆโ€‹: 1316โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆ vowelsโ€‹: 1701โ€‹

"Devel::Profiler" เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒ tmon.out เป€เบŠเบดเปˆเบ‡เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰เบเบฑเบš "dprofpp"
เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹, เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบขเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบเปเปˆโ€‹เบชเป‰เบฒเบ‡โ€‹เบ‚เบญเบ‡โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เบ–เบดโ€‹เบ•เบดโ€‹เบเบฒเบ™โ€‹เบญเปˆเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบญเบธโ€‹เบ—เบดเบ”โ€‹เบ•เบปเบ™โ€‹. "dprofpp"
เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡.

$> dprofpp

เป€เบงเบฅเบฒเบœเปˆเบฒเบ™เป„เบ›เบ—เบฑเบ‡เปเบปเบ” = 20.984 เบงเบดเบ™เบฒเบ—เบต
เป€เบงเบฅเบฒเบœเบนเป‰เปƒเบŠเป‰+เบฅเบฐเบšเบปเบš = 19.981 เบงเบดเบ™เบฒเบ—เบต
เป€เบงเบฅเบฒเบžเบดเป€เบชเบ”
%Time ExclSec CumulS #Calls sec/call Csec/c เบŠเบทเปˆ
49.0 9.792 14.509 251215 0.0000 0.0001 เบซเบผเบฑเบ:: matches
24.4 4.887 4.887 260643 0.0000 0.0000 เบซเบผเบฑเบ::debug
0.25 0.049 0.049 1 0.0490 0.0490 เบซเบผเบฑเบ:: เบฅเบฒเบเบ‡เบฒเบ™
0.00 0.000 0.000 1 0.0000 0.0000 Getopt::Long::GetOptions
0.00 0.000 0.000 2 0.0000 0.0000 Getopt::Long::ParseOptionSpec
0.00 0.000 0.000 1 0.0000 0.0000 Getopt::Long::FindOption
0.00 0.000 0.000 1 0.0000 0.0000 IO::File::new
0.00 0.000 0.000 1 0.0000 0.0000 IO::Handle::new
0.00 0.000 0.000 1 0.0000 0.0000 เบชเบฑเบ™เบเบฒเบฅเบฑเบ::gensym
0.00 0.000 0.000 1 0.0000 0.0000 IO::File::open

เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบ, เป€เบŠเบดเปˆเบ‡เบชเปˆเบงเบ™เปƒเบซเบเปˆเปเบกเปˆเบ™เบเป‰เบญเบ™เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆ
เบ—เบตเปˆเบชเป‰เบฒเบ‡เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบฎเบนเบšเปเบšเบšเป€เบญเบเบฐเบชเบฒเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”เป„เบ”เป‰เบ–เบทเบเบเปˆเบฒเบงเบซเบฒ
เบ„เบทเบเบฑเบ™. เป€เบงเบฅเบฒเบ—เบตเปˆเบœเปˆเบฒเบ™เป„เบ›, เบœเบนเป‰เปƒเบŠเป‰เปเบฅเบฐเบฅเบฐเบšเบปเบšเปเบกเปˆเบ™เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เป€เบ–เบดเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบฑเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒ
"Devel::Profiler" เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปเบฅเปˆเบ™เบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡, เปเบ•เปˆเบฅเบฒเบเบŠเบทเปˆเบ–เบฑเบ™เบฎเบนเป‰เบชเบถเบเบงเปˆเบฒเบ–เบทเบเบ•เป‰เบญเบ‡เบเบงเปˆเบฒ
somehow เบเปˆเบงเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เบˆเบฒเบ "Devel::DPF". เบ•เบปเบงเป€เบฅเบ 102% เบกเบต
เบซเบฒเบเป„เบ›, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบทเปƒเบ™เบเบฒเบ™เบเปเบฒเบˆเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เปเบฅเบฐ
เบฎเบฑเบšเบฎเบนเป‰เบ‚เปเป‰เบ”เบตเปเบฅเบฐเบ‚เปเป‰เป€เบชเบเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ, เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเปƒเบŠเป‰เบžเบงเบเบกเบฑเบ™. เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆ, เบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เป‚เบ—เบชเปเบฒเบฅเบฑเบš
เปเบ•เปˆเบฅเบฐ subroutine เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™เปƒเบ™เบชเบญเบ‡เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™, เบกเบฑเบ™เปเบกเปˆเบ™เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™. เป€เบ›เบฑเบ™
เบœเบนเป‰เบ‚เบฝเบ™เบ‚เบญเบ‡ "Devel::Proviler" เบ‚เบฝเบ™เบงเปˆเบฒ:

...เปเบฅเปˆเบ™ HTML::เบŠเบธเบ”เบ—เบปเบ”เบชเบญเบšเบ‚เบญเบ‡เปเบกเปˆเปเบšเบšเบžเบฒเบเปƒเบ•เป‰ Devel::DProf เบชเบฐเปเบ”เบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”()
เบšเปเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเปเบ•เปˆ Devel::Profiler เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบ›เบฐเบกเบฒเบ™ 10% เบ‚เบญเบ‡เป€เบงเบฅเบฒเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบœเบปเบ™เบœเบฐเบฅเบดเบ”().
เบ‚เป‰เบญเบเบšเปเปˆเบฎเบนเป‰เบงเปˆเบฒเบˆเบฐเป€เบŠเบทเปˆเบญเบญเบฑเบ™เปƒเบ” เปเบ•เปˆ เบฅเบณ เป„เบชเป‰เบ‚เบญเบ‡เบ‚เป‰เบญเบเบšเบญเบเบ‚เป‰เบญเบเบงเปˆเบฒเบกเบตเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบœเบดเบ”เบžเบฒเบ”
เบžเบฑเบ”เบ—เบฐเบ™เบฒ::DProf. HTML::Template::output() เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบดเบญเบฑเบ™เปƒเบซเบเปˆเบ—เบตเปˆเบฎเบฝเบเบฎเป‰เบญเบ‡
เบ—เบธเบเป†เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš. เปƒเบ™เบเปเบฅเบฐเบ™เบตเปƒเบ”เบเปเปˆเบ•เบฒเบก, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚.

YMMV.

เป€เบšเบดเปˆเบ‡ "Devel::Apache::Profiler" เป€เบŠเบดเปˆเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ "Devel::Profiler" เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ "mod_perl".

เบžเบฑเบ”เบ—เบฐเบ™เบฒ::SmallProf
เป‚เบ›เป„เบŸเป€เบŠเบต "Devel::SmallProf" เบเบงเบ”เป€เบšเบดเปˆเบ‡เป€เบงเบฅเบฒเปเบฅเปˆเบ™เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™ Perl เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เปเบฅเบฐเบœเบฐเบฅเบดเบ”
เบฅเบฒเบเบŠเบทเปˆเปเบ–เบงเบ•เปเปˆเปเบ–เบงเป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบงเปˆเบฒเปเบ•เปˆเบฅเบฐเปเบ–เบงเบ–เบทเบเป€เบญเบตเป‰เบ™เบˆเบฑเบเป€เบ—เบทเปˆเบญ, เปเบฅเบฐเปเบ•เปˆเบฅเบฐเบชเบฒเบเบเบฒเบงเป€เบ—เบปเปˆเบฒเปƒเบ”
เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹. เบกเบฑเบ™เบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒเป‚เบ”เบเบเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบ—เบธเบ‡ "-d" เบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบš Perl เปƒเบ™เป€เบงเบฅเบฒเปเบฅเปˆเบ™.

$> perl -d:SmallProf wordmatch -f perl5db.pl

<...เบซเบผเบฒเบเป€เบชเบฑเป‰เบ™เบ–เบทเบเบ•เบฑเบ”เบญเบญเบ...>

เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™ wordmatch เบชเปเบฒเบฅเบฑเบš perl5db.pl:
เป€เบชเบฑเป‰เบ™โ€‹เปƒเบ™โ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™โ€‹: 9428โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เปƒเบ™โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹: 50243โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ•เบปเบงโ€‹เบญเบฑเบโ€‹เบชเบญเบ™โ€‹เบžเบดโ€‹เป€เบชเบ” (เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบ„เปเบฒโ€‹)โ€‹: 20480โ€‹
เบ„เปเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ•เบปเบงโ€‹เบญเบฑเบโ€‹เบชเบญเบ™โ€‹เบžเบดโ€‹เป€เบชเบ” (เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบ„เปเบฒโ€‹)โ€‹: 7790โ€‹
เบ„เบณเบชเบฑเบšเบ—เบตเปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบžเบฐเบเบฑเบ™เบŠเบฐเบ™เบฐ: 4801
เบ„เปเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ•เบปเบงโ€‹เบžเบดเบกโ€‹เปƒเบซเบเปˆโ€‹: 1316โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆ vowelsโ€‹: 1701โ€‹

"Devel::SmallProf" เบ‚เบฝเบ™เบกเบฑเบ™เบญเบญเบเป€เบ›เบฑเบ™เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ smallprof.out, เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เป„เบ”เป‰
เบฎเบนเบšโ€‹เปเบšเบšโ€‹เบ‚เบญเบ‡โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบ„เบทโ€‹เบ™เบตเป‰โ€‹:

:

เป€เบกเบทเปˆเบญเป‚เบ„เบ‡เบเบฒเบ™เป„เบ”เป‰เบขเบธเบ”เป€เบŠเบปเบฒ, เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบญเบฒเบ”เบˆเบฐเบ–เบทเบเบเบงเบ”เบชเบญเบšเปเบฅเบฐเบˆเบฑเบ”เบฎเบฝเบ‡เป‚เบ”เบเปƒเบŠเป‰เบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบก
เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เบเบฒเบ™เบเบฑเปˆเบ™เบ•เบญเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก. เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™: เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบžเบฝเบ‡เบžเป:

$> cat smallprof.out | grep \d*: | เบ„เบฑเบ” -k3 | tac | เบซเบปเบง -n20

251215 1.65674 7.68000 75: เบ–เป‰เบฒ ($word =~ /($regex)/ ) {
251215 0.03264 4.40000 79: debug("word: $i_wd ".($has ? 'match' :
251215 0.02693 4.10000 81: return $has;
260643 0.02841 4.07000 128: เบ–เป‰เบฒ ( $debug ) {
260643 0.02601 4.04000 126: my $message = shift;
251215 0.02641 3.91000 73: my $has = 0;
251215 0.03311 3.71000 70: เบ‚เบญเบ‡เบ‚เป‰เบญเบ $i_wd = shift;
251215 0.02699 3.69000 72: $regex เบ‚เบญเบ‡เบ‚เป‰เบญเบ = shift;
251215 0.02766 3.68000 71: my $word = shift;
50243 0.59726 1.00000 59: $count{$i_LINES}{cons} =
50243 0.48175 0.92000 61: $count{$i_LINES}{spec} =
50243 0.00644 0.89000 56: $i_cons เบ‚เบญเบ‡เบ‚เป‰เบญเบ = matches($i_word, $word,
50243 0.48837 0.88000 63: $count{$i_LINES}{caps} =
50243 0.00516 0.88000 58: $i_caps เบ‚เบญเบ‡เบ‚เป‰เบญเบ = matches($i_word, $word, '^[(A-
50243 0.00631 0.81000 54: $i_spec เบ‚เบญเบ‡เบ‚เป‰เบญเบ = matches($i_word, $word, '[^a-
50243 0.00496 0.80000 57: $i_vows เบ‚เบญเบ‡เบ‚เป‰เบญเบ = matches($i_word, $word,
50243 0.00688 0.80000 53: $i_word++ ;
50243 0.48469 0.79000 62: $count{$i_LINES}{only} =
50243 0.48928 0.77000 60: $count{$i_LINES}{vows} =

50243 0.00683 0.75000 55: $i_only เบ‚เบญเบ‡เบ‚เป‰เบญเบ = matches($i_word, $word, '^[^a-
เบ—เบฑเบ™เบ—เบตเบ—เบฑเบ™เปƒเบ”เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบˆเบธเบ”เบชเบธเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเบเบฑเบšเป‚เบกเบ”เบนเบ™เป‚เบ›เบฃเป„เบŸเบฅเปŒเบเปˆเบญเบ,
เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบตเปˆเบกเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเป€เบชเบฑเป‰เบ™เบฅเบฐเบซเบฑเบ”เปƒเบ”เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”. เป€เบชเบฑเป‰เบ™ regex เบ™เบฑเป‰เบ™
เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเบชเบปเบ‡เปƒเบชเป€เบฅเบฑเบเบ™เป‰เบญเบ, เบ•เบปเบงเบขเปˆเบฒเบ‡. เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™
เปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™, เบšเปเปˆเบกเบตเบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบ”เบฝเบงเบ—เบตเปˆเบˆเบฐ profile เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”
เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เป€เบฎเบฑเบ”โ€‹เบงเบฝเบโ€‹.

เป€เบšเบดเปˆเบ‡ "Apache::SmallProf" เป€เบŠเบดเปˆเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ "Devel::SmallProf" เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ "mod_perl".

เบžเบฑเบ”เบ—เบฐเบ™เบฒ::FastProf
"Devel::FastProf" เปเบกเปˆเบ™เบœเบนเป‰เบชเป‰เบฒเบ‡เบชเบฒเบ Perl เบญเบทเปˆเบ™. เบ™เบตเป‰เป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เบ”เป‰เบงเบเบ—เบฑเบ”เบชเบฐเบ™เบฐเบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบš
เป€เบ›เบฑเบ™ profiler เป€เบชเบฑเป‰เบ™เป„เบง, เบเปˆเบงเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡ "Devel::SmallProf", เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™
เบ‚เบฝเบ™เปƒเบ™ "C". เป€เบžเบทเปˆเบญเปƒเบŠเป‰ "Devel::FastProf", เบชเบฐเปœเบญเบ‡ "-d" argument เปƒเบซเป‰เบเบฑเบš Perl:

$> perl -d:FastProf wordmatch -f perl5db.pl

<...เบซเบผเบฒเบเป€เบชเบฑเป‰เบ™เบ–เบทเบเบ•เบฑเบ”เบญเบญเบ...>

เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™ wordmatch เบชเปเบฒเบฅเบฑเบš perl5db.pl:
เป€เบชเบฑเป‰เบ™โ€‹เปƒเบ™โ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™โ€‹: 9428โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เปƒเบ™โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹: 50243โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ•เบปเบงโ€‹เบญเบฑเบโ€‹เบชเบญเบ™โ€‹เบžเบดโ€‹เป€เบชเบ” (เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบ„เปเบฒโ€‹)โ€‹: 20480โ€‹
เบ„เปเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ•เบปเบงโ€‹เบญเบฑเบโ€‹เบชเบญเบ™โ€‹เบžเบดโ€‹เป€เบชเบ” (เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบ„เปเบฒโ€‹)โ€‹: 7790โ€‹
เบ„เบณเบชเบฑเบšเบ—เบตเปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบžเบฐเบเบฑเบ™เบŠเบฐเบ™เบฐ: 4801
เบ„เปเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ•เบปเบงโ€‹เบžเบดเบกโ€‹เปƒเบซเบเปˆโ€‹: 1316โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆ vowelsโ€‹: 1701โ€‹

"Devel::FastProf" เบ‚เบฝเบ™เบชเบฐเบ–เบดเบ•เบดเปƒเบชเปˆเป„เบŸเบฅเปŒ fastprof.out เปƒเบ™โ€‹เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ›เบฐโ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹.
เป„เบŸเบฅโ€‹เปŒโ€‹เบœเบปเบ™โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹, เบ—เบตเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเปเบฒโ€‹เบ™เบปเบ”โ€‹เป„เบ”เป‰โ€‹, เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ•เบตโ€‹เบ„เบงเบฒเบกโ€‹เบซเบกเบฒเบโ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ "fprofppโ€‹"
เป‚เบ›เบฃเปเบเบฃเบกเป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡.

$> fprofpp | เบซเบปเบง -n20

# เบฎเบนเบšเปเบšเบšเบœเบปเบ™เบœเบฐเบฅเบดเบ” fprofpp เปเบกเปˆเบ™:
# เบŠเบทเปˆเป„เบŸเบฅเปŒ: เบ™เบฑเบšเป€เบงเบฅเบฒเบชเบฒเบ: เปเบซเบผเปˆเบ‡
wordmatch:75 3.93338 251215: เบ–เป‰เบฒ ($word =~ /($regex)/ ) {
wordmatch:79 1.77774 251215: debug("word: $i_wd ".($has ? 'match' : 'does not match')." chars: /$regex/");
wordmatch:81 1.47604 251215: return $has;
wordmatch:126 1.43441 260643: my $message = shift;
wordmatch:128 1.42156 260643: เบ–เป‰เบฒ ( $debug ) {
wordmatch:70 1.36824 251215: เบ‚เบญเบ‡เบ‚เป‰เบญเบ $i_wd = shift;
wordmatch:71 1.36739 251215: my $word = shift;
wordmatch:72 1.35939 251215: $regex เบ‚เบญเบ‡เบ‚เป‰เบญเบ = shift;

เบ—เบฑเบ™เบ—เบตเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒเบˆเปเบฒเบ™เบงเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ•เปˆเบฅเบฐเบชเบฒเบเป„เบ”เป‰เบ–เบทเบเป€เบญเบตเป‰เบ™เปเบกเปˆเบ™เบ„เบทเบเบฑเบ™
เบœเบปเบ™เบœเบฐเบฅเบดเบ” "Devel::SmallProf", เปเบฅเบฐเบฅเปเบฒเบ”เบฑเบšเปเบกเปˆเบ™เปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เป€เบฅเบฑเบเบ™เป‰เบญเบเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆ
เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบฅเปเบฒโ€‹เบ”เบฑเบšโ€‹เบ‚เบญเบ‡โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ—เบตเปˆโ€‹เปƒเบŠเป‰โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เป€เบชเบฑเป‰เบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹, "เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒ ( $debug ) { " เปเบฅเบฐ "เบ‚เบญเบ‡เบ‚เป‰เบญเบ
$message = shift;", เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡. เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ‚เบญเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เบญเบฒเบ”เบˆเบฐเบขเบนเปˆเปƒเบ™
algorithm เบ—เบตเปˆเปƒเบŠเป‰เบžเบฒเบเปƒเบ™, เบซเบผเบทเบกเบฑเบ™เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบเป‰เบญเบ™เบเบฒเบ™เบˆเปเบฒเบเบฑเบ”เบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบซเบผเบท
เบเบฒเบ™เบ‚เบฑเบ”เปเบเป‰เบ‡.

เป€เบšเบดเปˆเบ‡ DBIx::Profile เป€เบŠเบดเปˆเบ‡เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบžเบฒเบเปƒเบ•เป‰ "DBIx::*"
namespace.

เบžเบฑเบ”เบ—เบฐเบ™เบฒ::NYTProf
"Devel::NYTProf" เปเบกเปˆเบ™ เบ•เปเปˆเป„เบ› เบเบฒเบ™เบœเบฐเบฅเบดเบ” เบ‚เบญเบ‡ Perl code profiler, เบเบฒเบ™เปเบเป‰เป„เบ‚เบ‚เปเป‰เบšเบปเบเบœเปˆเบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเปƒเบ™
เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบญเบทเปˆเบ™เป†โ€‹เปเบฅเบฐโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบฅเบฑเบโ€‹เบชเบฐโ€‹เบ™เบฐโ€‹เป€เบขเบฑเบ™โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบซเบผเบฒเบโ€‹. เบเปˆเบญเบ™เบญเบทเปˆเบ™ เปเบปเบ”, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบ–เบทเบ เบ™เบณ เปƒเบŠเป‰เป€เบ›เบฑเบ™
เบญเบญเบ™เป„เบฅเบ™เปŒ profiler, เบ block เบซเบผเบท เบฅเบฐเบšเบปเบšเบเปˆเบญเบ profiler, เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เป€เบงเบฅเบฒเบ”เบฝเบงเบเบฑเบ™. เบกเบฑเบ™โ€‹เบเบฑเบ‡โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ sub-
เบ„เบงเบฒเบกเบฅเบฐเบญเบฝเบ” microsecond (100ns) เปƒเบ™เบฅเบฐเบšเบปเบšเบ—เบตเปˆเปƒเบซเป‰ "clock_gettime()". เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™
เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เปเบฅเบฐโ€‹เบขเบธเบ”โ€‹เป€เบŠเบปเบฒโ€‹เป€เบ–เบดเบ‡โ€‹เปเบกเปˆเบ™โ€‹เบงเปˆเบฒโ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบเบฒเบ™ profiledโ€‹. เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเปเบ–เบงเปœเบถเปˆเบ‡เป„เบ›เบซเบฒเป‚เบ›เบฃเป„เบŸเบฅเปŒ
เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ "mod_perl". เบกเบฑเบ™เบ‚เบฝเบ™เป€เบ›เบฑเบ™ "c" เปเบฅเบฐเบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เป‚เบ›เป„เบŸเบ—เบตเปˆเป„เบงเบ—เบตเปˆเบชเบธเบ”
เบกเบตเบชเปเบฒเบฅเบฑเบš Perl. เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ„เบงเบฒเบกเป€เบขเบฑเบ™เบžเบฝเบ‡เปเบ•เปˆเป„เบ›เบชเบธเบ”. เบžเบฝเบ‡เบžเปเปเบฅเป‰เบง, เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบงเบดเบ—เบตเบเบฒเบ™
เบกเบฑเบ™เป€เบฎเบฑเบ”เบงเบฝเบ - เบžเบฝเบ‡เปเบ•เปˆเปƒเบŠเป‰เบ›เบธเปˆเบก "-d" เบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเป€เบžเบทเปˆเบญเบชเบฝเบšเบกเบฑเบ™เปเบฅเบฐเปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ”.

$> perl -d:NYTProf wordmatch -f perl5db.pl

เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™ wordmatch เบชเปเบฒเบฅเบฑเบš perl5db.pl:
เป€เบชเบฑเป‰เบ™โ€‹เปƒเบ™โ€‹เป€เบญโ€‹เบเบฐโ€‹เบชเบฒเบ™โ€‹: 9427โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เปƒเบ™โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹: 50243โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ•เบปเบงโ€‹เบญเบฑเบโ€‹เบชเบญเบ™โ€‹เบžเบดโ€‹เป€เบชเบ” (เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบ„เปเบฒโ€‹)โ€‹: 20480โ€‹
เบ„เปเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ•เบปเบงโ€‹เบญเบฑเบโ€‹เบชเบญเบ™โ€‹เบžเบดโ€‹เป€เบชเบ” (เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบ„เปเบฒโ€‹)โ€‹: 7790โ€‹
เบ„เบณเบชเบฑเบšเบ—เบตเปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบžเบฐเบเบฑเบ™เบŠเบฐเบ™เบฐ: 4801
เบ„เปเบฒโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ•เบปเบงโ€‹เบžเบดเบกโ€‹เปƒเบซเบเปˆโ€‹: 1316โ€‹
เบ„เปเบฒโ€‹เบชเบฑเบšโ€‹เบ•เปˆเบฒเบ‡เป†โ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆ vowelsโ€‹: 1701โ€‹

"NYTProf" เบˆเบฐเบชเป‰เบฒเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป„เบŸเบฅเปŒ nytprof.out เป‚เบ”เบเบ„เปˆเบฒเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™. เบกเบฐเบ™เบธเบ”
เบšเบปเบ”โ€‹เบฅเบฒเบโ€‹เบ‡เบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบญเปˆเบฒเบ™โ€‹เป„เบ”เป‰โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ–เบทเบโ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบฑเป‰เบ‡โ€‹เบ‚เบถเป‰เบ™โ€‹เบˆเบฒเบโ€‹เบ—เบตเปˆโ€‹เบ™เบตเป‰โ€‹เป‚เบ”เบโ€‹เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ "nytprofhtmlโ€‹" เบ—เบตเปˆโ€‹เบชเบฐโ€‹เบซเบ™เบญเบ‡โ€‹เปƒเบซเป‰ (HTML
output) เปเบฅเบฐเป‚เบ„เบ‡เบเบฒเบ™ "nytprofcsv" (CSV output). เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เปƒเบŠเป‰เบฅเบฐเบšเบปเบš Unix "html2text"
เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เปƒเบ™เบเบฒเบ™เปเบ›เบ‡ nytprof/index.html เป„เบŸเบฅเปŒเป€เบžเบทเปˆเบญเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰.

$> html2text nytprof/index.html

เบ”เบฑเบ”เบŠเบฐเบ™เบตเป‚เบ›เบฃเป„เบŸเบฅเปŒเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš
เบชเปเบฒเบฅเบฑเบš wordmatch
เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบงเบฑเบ™เบชเบธเบ 26 เบเบฑเบ™เบเบฒ 13:46:39 2008
เบฅเบฒเบเบ‡เบฒเบ™เบงเบฑเบ™เบชเบธเบ เบงเบฑเบ™เบ—เบต 26 เบเบฑเบ™เบเบฒ 13:47:23 2008

15 เบเบดเบ”เบˆเบฐเบเบณเบเปˆเบญเบเบญเบฑเบ™เบ”เบฑเบšเบ•เบปเป‰เบ™ - เบˆเบฑเบ”เบฎเบฝเบ‡เบ•เบฒเบกเป€เบงเบฅเบฒเบชเบฐเป€เบžเบฒเบฐ
|เป‚เบ—|P|F|เบฅเบงเบก|เบชเบฐเป€เบžเบฒเบฐ|เบฅเบฒเบเบเบฒเบ™เบเปˆเบญเบ|
| | | |เป€เบงเบฅเบฒ |เป€เบงเบฅเบฒ | |
|251215|5 |1 |13.09263 |10.47692 |เบซเบผเบฑเบ:: |เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™ |
|260642|2 |1 |2.71199 |2.71199 |เบ•เบปเป‰เบ™เบ•เป:: |debug |
|1 |1 |1 |0.21404 |0.21404 |เบ•เบปเป‰เบ™เบ•เป:: |เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™ |
|2 |2 |2 |0.00511 |0.00511 |XSLoader:: |load (xsub) |
|14 |14|7 |0.00304 |0.00298 |เบœเบนเป‰เบชเบปเปˆเบ‡เบญเบญเบ:: |เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ |
|3 |1 |1 |0.00265 |0.00254 |เบœเบนเป‰เบชเบปเปˆเบ‡เบญเบญเบ:: |as_heavy |
|10 |10|4 |0.00140 |0.00140 |vars:: |เบ™เบณเป€เบ‚เบปเป‰เบฒ |
|13 |13|1 |0.00129 |0.00109 |เบ„เบปเบ‡เบ—เบตเปˆ:: |เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ |
|1 |1 |1 |0.00360 |0.00096 |FileHandle:: |เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ |
|3 |3 |3 |0.00086 |0.00074 |เบ„เบณเป€เบ•เบทเบญเบ™::เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™::|เบ™เบณเป€เบ‚เบปเป‰เบฒ |
|9 |3 |1 |0.00036 |0.00036 |เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”:: |เบšเบดเบ” |
|13 |13|13|0.00032 |0.00029 |เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”:: |เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ |
|2 |2 |2 |0.00020 |0.00020 |เบ„เบณเป€เบ•เบทเบญเบ™:: |เบ™เบณเป€เบ‚เบปเป‰เบฒ |
|2 |1 |1 |0.00020 |0.00020 |Getopt::Long:: |ParseOptionSpec|
|7 |7 |6 |0.00043 |0.00020 |เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”:: |unimport |

เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเป€เบšเบดเปˆเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเป€เบ•เบฑเบกเบ‚เบญเบ‡ 189 subroutines.

เบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เปเบฅเป‰เบงเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบเปˆเบฝเบงเบเบฑเบšเบญเบฑเบ™เปƒเบ”
subroutines เปเบกเปˆเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”. เบ•เปเปˆเป„เบ›เปƒเบซเป‰เบชเบฐเบ–เบดเบ•เบดเบšเบฒเบ‡เบขเปˆเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบšเปเบซเบผเปˆเบ‡
เป„เบŸเบฅเปŒ profiled.

เป„เบŸเบฅเปŒเบฅเบฐเบซเบฑเบ”เปเบซเบผเปˆเบ‡ - เบชเบฑเปˆเบ‡เป‚เบ”เบเป€เบงเบฅเบฒเบžเบดเป€เบชเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบŠเบทเปˆ
|Stmts|เบชเบฐเป€เบžเบฒเบฐ|เบชเบฐเป€เบฅเปˆเบ. |เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™|เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบฒ|
| |เป€เบงเบฅเบฒ | | | |
|2699761|15.66654 |6e-06 |line . เบ•เบฑเบ™. sub|wordmatch|
|35 |0.02187 |0.00062|เป€เบชเบฑเป‰เบ™ . เบ•เบฑเบ™. sub|IO/Handle.pm |
|274 |0.01525 |0.00006|เป€เบชเบฑเป‰เบ™ . เบ•เบฑเบ™. sub|Getopt/Long.pm |
|20 |0.00585 |0.00029|เป€เบชเบฑเป‰เบ™ . เบ•เบฑเบ™. เบเปˆเบญเบ|Fcntl.pm|
|128 |0.00340 |0.00003|เป€เบชเบฑเป‰เบ™ . เบ•เบฑเบ™. sub|Exporter/Heavy.pm |
|42 |0.00332 |0.00008|เป€เบชเบฑเป‰เบ™ . เบ•เบฑเบ™. sub|IO/File.pm |
|261 |0.00308 |0.00001|เปเบ–เบง . เบ•เบฑเบ™. sub|เบœเบนเป‰เบชเบปเปˆเบ‡เบญเบญเบ.pm|
|323 |0.00248 |8e-06 |line . เบ•เบฑเบ™. sub|constant.pm|
|12 |0.00246 |0.00021|เปเบ–เบง . เบ•เบฑเบ™. sub|File/Spec/Unix.pm |
|191 |0.00240 |0.00001|เปเบ–เบง . เบ•เบฑเบ™. sub|vars.pm|
|77 |0.00201 |0.00003|เป€เบชเบฑเป‰เบ™ . เบ•เบฑเบ™. sub|FileHandle.pm|
|12 |0.00198 |0.00016|เปเบ–เบง . เบ•เบฑเบ™. เบเปˆเบญเบ|Carp.pm|
|14 |0.00175 |0.00013|เปเบ–เบง . เบ•เบฑเบ™. sub|Symbol.pm|
|15 |0.00130 |0.00009|เป€เบชเบฑเป‰เบ™ . เบ•เบฑเบ™. sub|IO.pm|
|22 |0.00120 |0.00005|เปเบ–เบง . เบ•เบฑเบ™. sub|IO/Seekable.pm |
|198 |0.00085 |4e-06 |line . เบ•เบฑเบ™. sub|warnings/register.pm|
|114 |0.00080 |7e-06 |line . เบ•เบฑเบ™. sub|strict.pm|
|47 |0.00068 |0.00001|เปเบ–เบง . เบ•เบฑเบ™. sub|warnings.pm|
|27 |0.00054 |0.00002|เป€เบชเบฑเป‰เบ™ . เบ•เบฑเบ™. sub|overload.pm|
|9 |0.00047 |0.00005|เปเบ–เบง . เบ•เบฑเบ™. sub|SelectSaver.pm|
|13 |0.00045 |0.00003|เปเบ–เบง . เบ•เบฑเบ™. sub|File/Spec.pm |
|2701595|15.73869| |เบ—เบฑเบ‡เปเบปเบ” |
|128647 |0.74946 | |เบชเบฐเป€เบฅเปˆเบ |
| |0.00201 |0.00003|เบ›เบฒเบ™เบเบฒเบ‡ |
| |0.00121 |0.00003|เบ„เบงเบฒเบกเบšเปˆเบฝเบ‡เป€เบšเบ™ |

เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ—เบตเปˆเบœเบฐเบฅเบดเบ”เป‚เบ”เบ NYTProf 2.03 Perl profiler, เบžเบฑเบ”เบ—เบฐเบ™เบฒเป‚เบ”เบ Tim Bunce เปเบฅเบฐ
เบญเบฒเบ”เบฒเบก Kaplan.

เปƒเบ™เบˆเบธเบ”เบ™เบตเป‰, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰ html เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบฅเบดเบเปƒเบชเปˆเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบ•เปˆเบฒเบ‡เป†เป€เบžเบทเปˆเบญ
เป€เบˆเบฒเบฐเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เปเบ•เปˆเบฅเบฐ subroutine เปเบฅเบฐเปเบ•เปˆเบฅเบฐเบชเบฒเบเบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เปƒเบŠเป‰เบ‚เปเป‰เบ„เบงเบฒเบก
เบฅเบฒเบเบ‡เบฒเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰, เปเบฅเบฐเบกเบตเป„เบ”เป€เบฅเบเบฐเบ—เปเบฅเบตเบ—เบตเปˆเป€เบ•เบฑเบกเป„เบ›เบ”เป‰เบงเบเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบ—เบตเปˆเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเป„เบŸเบฅเปŒเปเบซเบผเปˆเบ‡,
เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบชเบฐเปเบ”เบ‡เบชเปˆเบงเบ™เบซเบ™เบถเปˆเบ‡เบ‚เบญเบ‡เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™ wordmatch-line.html เป„เบŸเบฅโ€‹เปŒโ€‹, เบžเบฝเบ‡โ€‹เบžเปโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹
เปƒเบซเป‰เบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบ‚เบญเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เบซเบงเบฑเบ‡เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบขเบฑเบ™เบ™เบตเป‰.

$> html2text nytprof/wordmatch-line.html

เบ‚เปเป‰เบกเบนเบ™เบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš --block view-.-line view-.-sub view-
เบชเปเบฒเบฅเบฑเบš wordmatch
เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบงเบฑเบ™เบชเบธเบ 26 เบเบฑเบ™เบเบฒ 13:46:39 2008
เบฅเบฒเบเบ‡เบฒเบ™เบงเบฑเบ™เบชเบธเบ เบงเบฑเบ™เบ—เบต 26 เบเบฑเบ™เบเบฒ 13:47:22 2008

เป„เบŸเบฅเปŒเบ„เปเบฒเบ—เบตเปˆเบเบปเบ‡เบเบฑเบ™

เบเบดเบ”เบˆเบฐเบเบณเบเปˆเบญเบ - เบˆเบฑเบ”เบฎเบฝเบ‡เบ•เบฒเบกเป€เบงเบฅเบฒเบชเบฐเป€เบžเบฒเบฐ
|เบเบฒเบ™เป‚เบ— |P|F|เบฅเบงเบก|เบชเบฐเป€เบžเบฒเบฐ|เบฅเบฒเบเบเบฒเบ™เบเปˆเบญเบ|
| | | |เป€เบงเบฅเบฒ |เป€เบงเบฅเบฒ | |
|251215|5|1|13.09263 |10.47692 |main::|matches|
|260642|2|1|2.71199 |2.71199|เบซเบผเบฑเบ::|เบ”เบตเบšเบฑเบ |
|1 |1|1|0.21404 |0.21404 |เบซเบผเบฑเบ::|เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™ |
|0 |0|0|0 |0 |เบ•เบปเป‰เบ™เบ•เป::|BEGIN |

|Line|Stmts.|Exclusive|Avg. |เบฅเบฐเบซเบฑเบ” |
| | |เป€เบงเบฅเบฒ | | |
|1| | | |#!/usr/bin/perl |
|2| | | | |
| | | | |เปƒเบŠเป‰เบขเปˆเบฒเบ‡เป€เบ‚เบฑเป‰เบกเบ‡เบงเบ”; |
|3 |3 |0.00086 |0.00029|# เปƒเบŠเป‰เป€เบงเบฅเบฒ 0.00003s เป‚เบ—เบซเบฒ 1 เป€เบ—เบทเปˆเบญ:: |
| | | | |เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ |
| | | | | เบเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบ„เปเบฒโ€‹เป€เบ•เบทเบญเบ™โ€‹; |
|4 |3 |0.01563 |0.00521|# เปƒเบŠเป‰เป€เบงเบฅเบฒ 0.00012s เป‚เบ—เบญเบญเบเบ„เบณเป€เบ•เบทเบญเบ™ 1 เบชเบฒเบ:: |
| | | | |เบ™เปเบฒเป€เบ‚เบปเป‰เบฒ |
|5| | | | |
|6| | | |=head1 NAME |
|7| | | | |
|8| | | |filewords - เบเบฒเบ™โ€‹เบงเบดโ€‹เป€เบ„เบฒเบฐโ€‹เบ„เปเบฒโ€‹เบ‚เบญเบ‡โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹เบ›เป‰เบญเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™ |
<...snip...>
|62 |1 |0.00445 |0.00445|เบžเบดเบกเบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™( %count ); |
| | | | |# เปƒเบŠเป‰เป€เบงเบฅเบฒ 0.21404s เป‚เบ—เบซเบฒ 1 เบชเบฒเบเบซเบฒเบซเบผเบฑเบ::เบฅเบฒเบเบ‡เบฒเบ™|
|63| | | | |
| | | | |# เปƒเบŠเป‰เบˆเปˆเบฒเบ 23.56955s (10.47692+2.61571) เบžเบฒเบเปƒเบ™ |
| | | | |เบ•เบปเป‰เบ™เบ•เป::เบเบฒเบ™เบˆเบฑเบšเบ„เบนเปˆเบ—เบตเปˆเบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒ 251215 เบ„เบฑเป‰เบ‡, |
| | | | |avg 0.00005s/เป‚เบ—: #50243 เบ„เบฑเป‰เบ‡ |
| | | | |(2.12134+0.51939s) เบขเบนเปˆเปเบ–เบง 57 เบ‚เบญเบ‡ wordmatch, avg|
| | | | |0.00005s/call #50243 เบ„เบฑเป‰เบ‡ (2.17735+0.54550s) |
|64| | | |เบขเบนเปˆเปเบ–เบง 56 เบ‚เบญเบ‡ wordmatch, avg 0.00005s/call # |
| | | | |50243 เป€เบ—เบทเปˆเบญ (2.10992+0.51797s) เบขเบนเปˆเปเบ–เบง 58 เบ‚เบญเบ‡ |
| | | | |wordmatch, เบชเบฐเป€เบฅเปˆเบ 0.00005s/เป‚เบ— #50243 เป€เบ—เบทเปˆเบญ |
| | | | |(2.12696+0.51598s) เบขเบนเปˆเปเบ–เบง 55 เบ‚เบญเบ‡ wordmatch, avg|
| | | | |0.00005s/call #50243 เบ„เบฑเป‰เบ‡ (1.94134+0.51687s) |
| | | | |เบขเบนเปˆเปเบ–เบง 54 เบ‚เบญเบ‡ wordmatch, avg 0.00005s/call |
| | | | |sub matches { |
<...snip...>
|102| | | | |
| | | | |# เปƒเบŠเป‰เป€เบงเบฅเบฒ 2.71199s เบžเบฒเบเปƒเบ™ main::debug เบŠเบถเปˆเบ‡เป€เบ›เบฑเบ™ |
| | | | |เป‚เบ— 260642 เป€เบ—เบทเปˆเบญ, เบชเบฐเป€เบฅเปˆเบ 0.00001s/เป‚เบ—: # |
| | | | |251215 เป€เบงเบฅเบฒ (2.61571+0s) เป‚เบ”เบเบซเบผเบฑเบ::เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เบขเบนเปˆเบ—เบตเปˆ |
|103| | | |line 74 เบ‚เบญเบ‡ wordmatch, avg 0.00001s/call #9427 |
| | | | |เป€เบงเบฅเบฒ (0.09628+0s) เบขเบนเปˆเปเบ–เบง 50 เบ‚เบญเบ‡ wordmatch, avg|
| | | | |0.00001s/เป‚เบ— |
| | | | |sub debug { |
|104 |260642|0.58496 |2e-06 |my $message = shift; |
|105| | | | |
|106 |260642|1.09917 |4e-06 |if ($debug ) { |
|107| | | |เบžเบดเบก STDERR "DBG: $message\n"; |
|108| | | |}|
|109| | | |}|
|110| | | | |
|111 |1 |0.01501 |0.01501|เบญเบญเบ 0; |
|112| | | | |

Oodles เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเบขเบนเปˆเปƒเบ™เบ™เบฑเป‰เบ™ - เบ™เบตเป‰เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบฒเบ‡เบ•เปเปˆเป„เบ›.

เป€เบšเบดเปˆเบ‡ "Devel::NYTProf::Apache" เป€เบŠเบดเปˆเบ‡เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ "Devel::NYTProf" เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ "mod_perl".

เบเบณ เบฅเบฑเบ‡เบˆเบฑเบ”เบฎเบฝเบ‡


เป‚เบกเบ”เบนเบ™ Perl เบšเปเปˆเปเบกเปˆเบ™เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ”เบฝเบงเบ—เบตเปˆเบ™เบฑเบเบงเบดเป€เบ„เบฒเบฐเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบกเบตเบขเบนเปˆเปƒเบ™เบเบฒเบ™เบเปเบฒเบˆเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เบฅเบฐเบšเบปเบš
เป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบŠเบฑเปˆเบ™ "เป€เบงเบฅเบฒ" เบšเปเปˆเบ„เบงเบ™เบ–เบทเบเบกเบญเบ‡เบ‚เป‰เบฒเบกเป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™, เบšเปˆเบญเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เป€เบงเบฅเบฒ a
เป€เบšเบดเปˆเบ‡เป„เบงเปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡. เบ›เบถเป‰เบกเบซเบผเบฒเบเบซเบปเบง, เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰ เปเบฅเบฐเบšเบปเบ”เบ„เบงเบฒเบก, เป„เบ”เป‰เบ–เบทเบเบ‚เบฝเบ™เบเปˆเบฝเบงเบเบฑเบšเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš
เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡ algorithms, เปเบฅเบฐเบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เบกเบตเบซเบผเบฒเบเบ—เบตเปˆเบ”เบต
เบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เป‚เบกเบ”เบนเบ™เบ—เบตเปˆเบชเบปเบกเบ„เบงเบ™เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™: "Sort::Maker", "Sort::Key" เบžเบฒเบเบฎเบฝเบ™ spring to
เปƒเบˆ. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เบกเบฑเบ™เบเบฑเบ‡เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบชเบฑเบ‡เป€เบเบ”เบเบฒเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบš Perl เบชเบฐเป€เบžเบฒเบฐ
เบเบฒเบ™เบ•เบตเบฅเบฒเบ„เบฒเบเปˆเบฝเบงเบเบฑเบšเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเปƒเบซเป‰เบ•เบปเบงเบขเปˆเบฒเบ‡เบซเบผเบทเบชเบญเบ‡เบเบฑเบš
เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบฅเบฝเบ‡โ€‹เบ›เบฐโ€‹เบฅเบดโ€‹เบกเบฒเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เปƒเบซเบเปˆโ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบกเบตโ€‹เบœเบปเบ™โ€‹เบเบฐโ€‹เบ—เบปเบšโ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹. เบ›เบฐเบเบฒเบ™เบ—เปเบฒเบญเบดเบ”, เป€เบฅเบทเป‰เบญเบเป†
เบˆเบธเบ”เบ—เบตเปˆเบ–เบทเบเบกเบญเบ‡เบ‚เป‰เบฒเบกเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฑเบ”เบฅเบฝเบ‡เบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ, เบ„เบปเบ™เป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบžเบฐเบเบฒเบเบฒเบกเบซเบผเบธเบ”เบœเปˆเบญเบ™เบ‚เปเป‰เบกเบนเบ™
เบ–เบทเบเบเปเบฒเบ™เบปเบ”เปƒเบซเป‰เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเปเบฅเบฐเปƒเบ™เบซเบผเบฒเบเป†เบเปเบฅเบฐเบ™เบต "grep()" เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเป€เบ›เบฑเบ™เบ•เบปเบงเบเบญเบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ:

@data = เบˆเบฑเบ”เบฎเบฝเบ‡ grep { /$filter/ } @incoming

เบ„เปเบฒเบชเบฑเปˆเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบซเบผเบธเบ”เบฅเบปเบ‡เบขเปˆเบฒเบ‡เบซเบผเบงเบ‡เบซเบผเบฒเบเบ‚เบญเบ‡เบงเบฑเบ”เบชเบฐเบ”เบธเบ—เบตเปˆเบˆเบฐเบˆเบฑเบ”เบฅเบฝเบ‡เบ•เบฒเบกเบ•เบปเบงเบˆเบดเบ‡
เปƒเบ™โ€‹เบชเบฐโ€‹เบ–เบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹, เปเบฅเบฐโ€‹เบšเปเปˆโ€‹เบ„เบงเบ™โ€‹เบˆเบฐโ€‹เบ–เบทเบโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เป€เบชเบ” lightly เป€เบเบตเบ™โ€‹เป„เบ›โ€‹เบขเปˆเบฒเบ‡โ€‹เบ”เบฝเบงโ€‹เบšเบปเบ™โ€‹เบžเบทเป‰เบ™โ€‹เบ–เบฒเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹
เบ„เบงเบฒเบกเบฅเบฝเบšเบ‡เปˆเบฒเบ. เบซเบผเบฑเบเบเบฒเบ™ "KISS" เบกเบฑเบเบˆเบฐเบ–เบทเบเบกเบญเบ‡เบ‚เป‰เบฒเบก - เบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เปเปˆเป„เบ›เปƒเบŠเป‰ the
เบฅเบฐเบšเบปเบšเบ‡เปˆเบฒเบเบ”เบฒเบ "เป€เบงเบฅเบฒ" เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™. เปƒเบซเป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบ•เบปเบงเบˆเบดเบ‡เบ‚เบญเบ‡
เบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ, เป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบ apache เบˆเบฐเป€เบฎเบฑเบ”. เบญเบฑเบ™โ€‹เบ™เบตเป‰โ€‹เบกเบตโ€‹เบซเบผเบฒเบโ€‹เบเบงเปˆเบฒ
เป„เบ•เบฃเบกเบฒเบ”เบ‚เบญเบ‡เบ™เบถเปˆเบ‡เบฅเป‰เบฒเบ™เป€เบชเบฑเป‰เบ™, เบกเบตเบ‚เบฐเปœเบฒเบ” 50M, เปเบฅเบฐเบชเปˆเบงเบ™เบซเบเปเป‰เบ‚เบญเบ‡เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบ”เบฑเปˆเบ‡เบ™เบตเป‰:

# logfile

188.209-65-87.adsl-dyn.isp.belgacom.be - - [08/Feb/2007:12:57:16 +0000] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/ 4.0 (เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰; MSIE 6.0; Windows NT 5.1; SV1)"
188.209-65-87.adsl-dyn.isp.belgacom.be - - [08/Feb/2007:12:57:16 +0000] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/ 4.0 (เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰; MSIE 6.0; Windows NT 5.1; SV1)"
151.56.71.198 - [08/Feb/2007:12:57:41 +0000] "GET /suse-on-vaio.html HTTP/1.1" 200 2858 ".http://www.linux-on-laptops.com/sony.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"
151.56.71.198 - [08/Feb/2007:12:57:42 +0000] "GET /data/css HTTP/1.1" 404 206"http://www.rfi.net/suse-on-vaio.html" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"
151.56.71.198 - [08/Feb/2007:12:57:43 +0000] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.2; en- เบชเบฐเบซเบฐเบฅเบฑเบ”; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"
217.113.68.60 - [08/Feb/2007:13:02:15 +0000] "GET/HTTP/1.1" 304 - "-" "Mozilla/4.0 (เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰; MSIE 6.0; Windows NT 5.1; SV1)"
217.113.68.60 - [08/Feb/2007:13:02:16 +0000] "GET /data/css HTTP/1.1" 404 206"http://www.rfi.net/" "Mozilla/4.0 (เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰; MSIE 6.0; Windows NT 5.1; SV1)"
debora.to.isac.cnr.it - โ€‹โ€‹- [08/Feb/2007:13:03:58 +0000] "GET /suse-on-vaio.html HTTP/1.1" 200 2858 ".http://www.linux-on-laptops.com/sony.html" "Mozilla/5.0 (เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰; Konqueror/3.4; Linux) KHTML/3.4.0 (เบ„เบทเบเบฑเบš Gecko)"
debora.to.isac.cnr.it - โ€‹โ€‹- [08/Feb/2007:13:03:58 +0000] "GET /data/css HTTP/1.1" 404 206 ".http://www.rfi.net/suse-on-vaio.html" "Mozilla/5.0 (เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰; Konqueror/3.4; Linux) KHTML/3.4.0 (เบ„เบทเบเบฑเบš Gecko)"
debora.to.isac.cnr.it - โ€‹โ€‹- [08/Feb/2007:13:03:58 +0000] "GET /favicon.ico HTTP/1.1" 404 209 "-" "Mozilla/5.0 (เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰; Konqueror/ 3.4; Linux) KHTML/3.4.0 (เบ„เบท Gecko)"
195.24.196.99 - [08/Feb/2007:13:26:48 +0000] "GET/HTTP/1.0" 200 3309 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.9" .20061206) Gecko/1.5.0.9 Firefox/XNUMX"
195.24.196.99 - [08/Feb/2007:13:26:58 +0000] "GET /data/css HTTP/1.0" 404 206"http://www.rfi.net/" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9"
195.24.196.99 - - [08/Feb/2007:13:26:59 +0000] "GET /favicon.ico HTTP/1.0" 404 209 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9"
crawl1.cosmixcorp.com - - [08/Feb/2007:13:27:57 +0000] "GET /robots.txt HTTP/1.0" 200 179 "-" "voyager/1.0"
crawl1.cosmixcorp.com - - [08/Feb/2007:13:28:25 +0000] "GET /links.html HTTP/1.0" 200 3413 "-" "voyager/1.0"
fhm226.internetdsl.tpnet.pl - - [08/Feb/2007:13:37:32 +0000] "GET /suse-on-vaio.html HTTP/1.1" 200 2858 ".http://www.linux-on-laptops.com/sony.html" "Mozilla/4.0 (เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰; MSIE 6.0; Windows NT 5.1; SV1)"
fhm226.internetdsl.tpnet.pl - - [08/Feb/2007:13:37:34 +0000] "GET /data/css HTTP/1.1" 404 206"http://www.rfi.net/suse-on-vaio.html" "Mozilla/4.0 (เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰; MSIE 6.0; Windows NT 5.1; SV1)"
80.247.140.134 - - [08/Feb/2007:13:57:35 +0000] "GET/HTTP/1.1" 200 3309 "-" "Mozilla/4.0 (เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰; MSIE 6.0; Windows NT 5.1 CLR; .1.1.4322.NET; .XNUMX)"
80.247.140.134 - [08/Feb/2007:13:57:37 +0000] "GET /data/css HTTP/1.1" 404 206"http://www.rfi.net" "Mozilla/4.0 (เป€เบ‚เบปเป‰เบฒเบเบฑเบ™เป„เบ”เป‰; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)"
pop.compuscan.co.za - - [08/Feb/2007:14:10:43 +0000] "GET / HTTP/1.1" 200 3309 "-" "www.clamav.net"
livebot-207-46-98-57.search.live.com - - [08/Feb/2007:14:12:04 +0000] "GET /robots.txt HTTP/1.0" 200 179 "-" "msnbot/ 1.0 (+http://search.msn.com/msnbot.htm)"
livebot-207-46-98-57.search.live.com - - [08/Feb/2007:14:12:04 +0000] "GET /html/oracle.html HTTP/1.0" 404 214 "-" "" msnbot/1.0 (+http://search.msn.com/msnbot.htm)"
dslb-088-064-005-154.pools.arcor-ip.net - - [08/Feb/2007:14:12:15 +0000] "GET / HTTP/1.1" 200 3309 "-" "www.clamav .net"
196.201.92.41 - [08/Feb/2007:14:15:01 +0000] "GET/HTTP/1.1" 200 3309 "-" "MOT-L7/08.B7.DCR MIB/2.2.1 Profile/MIDP -2.0 เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ/CLDC-1.1"

เบงเบฝเบเบ‡เบฒเบ™เบชเบฐเป€เบžเบฒเบฐเบ™เบตเป‰เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเบˆเบฑเบ”เบฎเบฝเบ‡ 286,525 เปเบ–เบงเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบ™เบตเป‰เป‚เบ”เบ Response Code, Query,
เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš, เบญเป‰เบฒเบ‡เบญเบตเบ‡ Url, เปเบฅเบฐเบชเบธเบ”เบ—เป‰เบฒเบเบงเบฑเบ™เบ—เบต. เบเบฒเบ™เปเบเป‰เป„เบ‚เบซเบ™เบถเปˆเบ‡เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เปƒเบŠเป‰เบฅเบฐเบซเบฑเบ”เบ•เปเปˆเป„เบ›เบ™เบตเป‰,
เป€เบŠเบดเปˆเบ‡ iterates เปƒเบ™เป„เบฅเบเบฐเป„เบŸเบฅเปŒเบ—เบตเปˆเปƒเบซเป‰เบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™เบ„เปเบฒเบชเบฑเปˆเบ‡.

# sort-apache-log

#!/usr/bin/perl -n

เปƒเบŠเป‰เบขเปˆเบฒเบ‡เป€เบ„เบฑเปˆเบ‡เบ„เบฑเบ”;
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเป€เบ•เบทเบญเบ™;

@data เบ‚เบญเบ‡เบ‚เป‰เบญเบ;

เป€เบชเบฑเป‰เบ™:
เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆ ( <> ) {
$line เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $_;
เบ–เป‰เบฒ (
$line =~ m/^(
([\w\.\-]+) # เบฅเบนเบเบ„เป‰เบฒ
\s*-\s*-\s*\[
([^]]+) # เบงเบฑเบ™เบ—เบต
\]\s*"\w+\s*
(\S+) # เบ„เบณเบ–เบฒเบก
[^"]+"\s*
(\d+) # เบชเบฐเบ–เบฒเบ™เบฐ
\s+\S+\s+"[^"]*"\s+"
([^"]*) # browser
"
.*
)$/x
) {
my @chunks = เปเบเบ(/ +/, $line);
$ip เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $1;
$date เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $2;
$query เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $3;
เบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบš $ เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $4;
$browser เบ‚เบญเบ‡เบ‚เป‰เบญเบ = $5;

push(@data, [$ip, $date, $query, $status, $browser, $line]);
}
}

เบ‚เบญเบ‡เบ‚เป‰เบญเบ @sorted = เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡ {
$a->[3] cmp $b->[3]
||
$a->[2] cmp $b->[2]
||
$a->[0] cmp $b->[0]
||
$a->[1] cmp $b->[1]
||
$a->[4] cmp $b->[4]
} @data;

foreach เบ‚เบญเบ‡เบ‚เป‰เบญเบ $data ( @sorted ) {
เบžเบดเบก $data->[5];
}

เบญเบญเบเบˆเบฒเบ 0;

เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบ‡เบฒเบ™โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ™เบตเป‰โ€‹, redirect "STDOUTโ€‹" เบชเบฐโ€‹เบ™เบฑเป‰เบ™โ€‹เบกเบฑเบ™โ€‹เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เป„เบ”เป‰โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบเบงเบ”โ€‹เบชเบญเบšโ€‹เบœเบปเบ™โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เปเบกเปˆเบ™โ€‹
เปเบเป‰เป„เบ‚เบˆเบฒเบเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบกเบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบฅเปˆเบ™เปเบฅเบฐเบ™เปเบฒเปƒเบŠเป‰ "เป€เบงเบฅเบฒ" utility เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเป€เบžเบทเปˆเบญเบเบงเบ”เบเบฒเป€เบšเบดเปˆเบ‡เป‚เบ”เบเบฅเบงเบก
เป€เบงเบฅเบฒเปเบฅเปˆเบ™.

$> เป€เบงเบฅเบฒ ./sort-apache-log logfile > out-sort

เบ•เบปเบงเบˆเบดเบ‡ 0m17.371s
เบœเบนเป‰เปƒเบŠเป‰ 0m15.757s
sys 0m0.592s

เป‚เบ„เบ‡เบเบฒเบ™เปƒเบŠเป‰เป€เบงเบฅเบฒเบžเบฝเบ‡เปเบ•เปˆเบซเบผเบฒเบเบเบงเปˆเบฒ 17 เบงเบดเบ™เบฒเบ—เบต wallclock เป€เบžเบทเปˆเบญเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™. เบชเบฑเบ‡เป€เบเบ”เบ„เปˆเบฒเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™ "เป€เบงเบฅเบฒ"
เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเปƒเบŠเป‰เบญเบฑเบ™เบ”เบฝเบงเบเบฑเบ™เบชเบฐเป€เบซเบกเบต, เปเบฅเบฐเบšเปเปˆเบชเบฑเบšเบชเบปเบ™เบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบ„เบปเบ™เปเบกเปˆเบ™เบซเบเบฑเบ‡
เปเบฒเบ เบ„เบงเบฒเบกเบงเปˆเบฒ.

เป€เบงเบฅเบฒเบˆเบดเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เป„เบ›เปเบฅเป‰เบง
เป‚เบ”เบเบฅเบงเบก, เบซเบผเบท wallclock, เป€เบงเบฅเบฒเบฅเบฐเบซเบงเปˆเบฒเบ‡เป€เบงเบฅเบฒเบ—เบตเปˆ "เป€เบงเบฅเบฒ" เบ–เบทเบเป€เบญเบตเป‰เบ™, เปเบฅเบฐเป€เบงเบฅเบฒเบ—เบตเปˆเบกเบฑเบ™
เบขเบธเบ”เบ•เบด. เป€เบงเบฅเบฒเบœเปˆเบฒเบ™เป„เบ›เบฅเบงเบกเบกเบตเบ—เบฑเบ‡เป€เบงเบฅเบฒเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰ เปเบฅเบฐเบฅเบฐเบšเบปเบš, เปเบฅเบฐเป€เบงเบฅเบฒเบ—เบตเปˆเปƒเบŠเป‰
เบฅเปเบ–เป‰เบฒเบœเบนเป‰เปƒเบŠเป‰เปเบฅเบฐเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบญเบทเปˆเบ™เป†เปƒเบ™เบฅเบฐเบšเบปเบš. เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒ, เบ™เบตเป‰เปเบกเปˆเบ™เบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”
เบ›เบฐเบกเบฒเบ™เบเบฒเบ™เบงเบฑเบ”เปเบ—เบเบ—เบตเปˆเปƒเบซเป‰.

เป€เบงเบฅเบฒ CPU เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰
เป€เบงเบฅเบฒเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เปเบกเปˆเบ™เบˆเปเบฒเบ™เบงเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบŠเป‰เปƒเบ™เบ™เบฒเบกเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰
เบฅเบฐเบšเบปเบšเบ™เบตเป‰เบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ„เบ‡เบเบฒเบ™เบ™เบตเป‰.

เป€เบงเบฅเบฒ CPU เบ‚เบญเบ‡เบฅเบฐเบšเบปเบš
เป€เบงเบฅเบฒเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเปเบกเปˆเบ™เบˆเปเบฒเบ™เบงเบ™เป€เบงเบฅเบฒเบ—เบตเปˆ kernel เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เปƒเบŠเป‰เป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบปเบเบเบฐเบ•เบด, เบซเบผเบท
เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบš, เปƒเบ™เบ™เบฒเบกเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰.

เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบš "เบเบฒเบ™เบซเบฑเบ™เป€เบ›เบฑเบ™ Schwarzian" เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบฅเบปเบšเบฅเป‰เบฒเบ‡เบเบฒเบ™
input เปเบฅเบฐ output arrays เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”, เปเบฅเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เป‚เบ”เบเบเบปเบ‡เป€เบ›เบฑเบ™เบกเบฑเบ™
เบกเบฒเบฎเบญเบ”เบ„เบทเบเบฑเบ™. เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฅเบฐเบซเบฑเบ”เบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™:

# sort-apache-log-schwarzian

#!/usr/bin/perl -n

เปƒเบŠเป‰เบขเปˆเบฒเบ‡เป€เบ„เบฑเปˆเบ‡เบ„เบฑเบ”;
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเป€เบ•เบทเบญเบ™;

เบžเบดเบก

เปเบœเบ™เบ—เบตเปˆ $_->[0] =>

เบˆเบฑเบ”เบฅเบฝเบ‡ {
$a->[4] cmp $b->[4]
||
$a->[3] cmp $b->[3]
||
$a->[1] cmp $b->[1]
||
$a->[2] cmp $b->[2]
||
$a->[5] cmp $b->[5]
}
เปเบœเบ™เบ—เบตเปˆ [$_, m/^(
([\w\.\-]+) # เบฅเบนเบเบ„เป‰เบฒ
\s*-\s*-\s*\[
([^]]+) # เบงเบฑเบ™เบ—เบต
\]\s*"\w+\s*
(\S+) # เบ„เบณเบ–เบฒเบก
[^"]+"\s*
(\d+) # เบชเบฐเบ–เบฒเบ™เบฐ
\s+\S+\s+"[^"]*"\s+"
([^"]*) # browser
"
.*
)$/xo ]

=> <> ;

เบญเบญเบเบˆเบฒเบ 0;

เปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ”เปƒเบซเบกเปˆเบ•เปเปˆเบเบฑเบš logfile เบ”เบฝเบงเบเบฑเบ™, เบ”เบฑเปˆเบ‡เบ‚เป‰เบฒเบ‡เป€เบ—เบดเบ‡, เป€เบžเบทเปˆเบญเบเบงเบ”เป€เบšเบดเปˆเบ‡เป€เบงเบฅเบฒเปƒเบซเบกเปˆ.

$> เป€เบงเบฅเบฒ ./sort-apache-log-schwarzian logfile > out-schwarz

เบ•เบปเบงเบˆเบดเบ‡ 0m9.664s
เบœเบนเป‰เปƒเบŠเป‰ 0m8.873s
sys 0m0.704s

เป€เบงเบฅเบฒเป„เบ”เป‰เบ–เบทเบเบ•เบฑเบ”เบฅเบปเบ‡เป€เบ„เบดเปˆเบ‡เบซเบ™เบถเปˆเบ‡, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ„เบงเบฒเบกเป„เบงเบ—เบตเปˆเบซเบ™เป‰เบฒเป€เบ„เบปเบฒเบฅเบปเบšเป‚เบ”เบเบกเบฒเบ”เบ•เบฐเบ–เบฒเบ™เปƒเบ”เบเปเปˆเบ•เบฒเบก.
เบ•เบฒเบกเบ—เปเบฒเบกเบฐเบŠเบฒเบ”, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ”เปเบกเปˆเบ™เบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบšเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เปเบฒเบญเบดเบ”,
เบ™เบตเป‰เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบฅเบฐเบšเบปเบš Unix "cksum" utility เป€เบ‚เบปเป‰เบฒเบกเบฒ.

$> cksum out-sort out-schwarz
3044173777 52029194 เบญเบญเบ-เบ„เบฑเบ”
3044173777 52029194 เบญเบญเบ-schwarz

BTW. เบฅเบฐเบงเบฑเบ‡เป€เบเบตเบ™เป„เบ›เบ‚เบญเบ‡เบ„เบงเบฒเบกเบเบปเบ”เบ”เบฑเบ™เบˆเบฒเบเบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบ—เบตเปˆเป€เบซเบฑเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เป€เบฅเบฑเปˆเบ‡เป‚เบ„เบ‡เบเบฒเบ™เป‚เบ”เบ 50% เบ‚เบญเบ‡
runtime เบ„เบฑเป‰เบ‡เบ”เบฝเบง, เบžเบฝเบ‡เปเบ•เปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบซเบ™เบถเปˆเบ‡เป€เบ”เบทเบญเบ™เบ•เปเปˆเบกเบฒเป€เบฎเบฑเบ”เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™ (เป€เบฅเบทเปˆเบญเบ‡เบˆเบดเบ‡) -
เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเบ•เป‰เบญเบ‡เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเป€เบˆเบปเป‰เบฒเป€เบ›เบฑเบ™เบกเบฐเบ™เบธเบ”เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบ—เปˆเบฒเบ™เป€เบ›เบฑเบ™เป‚เบ›เบฅเปเบเบฅเบก Perl, เปเบฅเบฐ
เป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบซเบฑเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰...

เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบ


เบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ—เบตเปˆเบ”เบตเปเบกเปˆเบ™เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบเบฑเบš
เบ‚เปเป‰โ€‹เบ„เบงเบฒเบกโ€‹เบ—เบตเปˆโ€‹เป€เบซเบกเบฒเบฐโ€‹เบชเบปเบก, เบขเปˆเบฒเบ‡โ€‹เปƒเบ”โ€‹เบเปโ€‹เบ•เบฒเบกโ€‹เบกเบตโ€‹เป‚เบฎเบ‡โ€‹เบฎเบฝเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ„เบงเบฒเบกโ€‹เบ„เบดเบ”โ€‹เบ—เบตเปˆ
เปเบ™เบฐเบ™เปเบฒเบงเปˆเบฒเป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบเบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™ เบชเบปเบ™เบ—เบฐเบ™เบฒ, เป€เบ›เบฑเบ™เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบฅเบฐเบšเบปเบšเบ•เปˆเบญเบ‡เป‚เบชเป‰เบ‚เบญเบ‡เบœเบปเบ™เบœเบฐเบฅเบดเบ” unbroken somehow
เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ„เบงเบฒเบกเบขเบนเปˆเบฅเบญเบ”เบ‚เบญเบ‡เป‚เบ„เบ‡เบเบฒเบ™. เบ–เป‰เบฒเบ„เบงเบฒเบกเป„เบงเบขเบนเปˆเปƒเบ™เบšเบฑเบ™เบซเบฒเปƒเบ”เบเปเปˆเบ•เบฒเบก, เบงเบดเบ—เบตเบเบฒเบ™เบ™เบตเป‰เปเบกเปˆเบ™
เบœเบดเบ”

เบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™เบ—เบปเปˆเบงเป„เบ›เปเบกเปˆเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบกเบตเบฅเบฑเบเบชเบฐเบ™เบฐเบ„เป‰เบฒเบเบ„เบทเบ™เบตเป‰:

logger->debug( "เบ‚เปเป‰เบ„เบงเบฒเบกเบšเบฑเบ™เบ—เบถเบเบœเปˆเบฒเบ™ process-id: $$ INC: " . dumper(\%INC) )

เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เบˆเบฐเบ–เบทเบเบงเบดเป€เบ„เบฒเบฐเปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบชเบฐเป€เบซเบกเบต, เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบเบฒเบ™เบ”เบตเบšเบฑเบ
เบฅเบฐเบ”เบฑเบšเบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰เปƒเบ™เป„เบŸเบฅเปŒเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเปเบกเปˆเบ™เบชเบนเบ™. เป€เบกเบทเปˆเบญ เบ”เบตเบšเบฑเบ() subroutine เป„เบ”เป‰
เป€เบ‚เบปเป‰เบฒเป„เบ›, เปเบฅเบฐเบ•เบปเบงเปเบ› $debug เบžเบฒเบเปƒเบ™เป„เบ”เป‰เบขเบทเบ™เบขเบฑเบ™เบงเปˆเบฒเป€เบ›เบฑเบ™เบชเบนเบ™, เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ‚เปเป‰เบ„เบงเบฒเบก
เบ—เบตเปˆเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เปเบฅเป‰เบงเบˆเบฐเบ–เบทเบเบเบปเบเป€เบฅเบตเบเปเบฅเบฐเป‚เบ„เบ‡เบเบฒเบ™เบˆเบฐเบชเบทเบšเบ•เปเปˆ. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡
เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, "\%INC" hash เบˆเบฐเบ–เบทเบเบ–เบดเป‰เบกเปเบฅเป‰เบง, เปเบฅเบฐเบ‚เปเป‰เบ„เบงเบฒเบก
เบเบฒเบ™เบเปเปˆเบชเป‰เบฒเบ‡, เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบชเบฒเบกเบฒเบ”เบ–เบทเบเบ‚เป‰เบฒเบกเบœเปˆเบฒเบ™เบ•เบปเบงเปเบ› debug เปƒเบ™เบ„เปเบฒเบ–เบฐเปเบซเบผเบ‡เบเบฒเบ™
เบฅเบฐเบ”เบฑเบš, เปเบšเบšเบ™เบตเป‰:

logger->debug( "เบ‚เปเป‰เบ„เบงเบฒเบกเบšเบฑเบ™เบ—เบถเบเบœเปˆเบฒเบ™ process-id: $$ INC: " . dumper(\%INC) ) เบ–เป‰เบฒ $DEBUG;

เบœเบปเบ™เบเบฐเบ—เบปเบšเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เป„เบ”เป‰เป‚เบ”เบเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบชเบฐเบ„เบดเบšเบ—เบปเบ”เบชเบญเบšเบ—เบตเปˆเบกเบตเบ—เบฑเบ‡เบชเบญเบ‡เบฎเบนเบšเปเบšเบš, เบฅเบงเบกเบ—เบฑเบ‡ a
"debug()" เป‚เบ›เบฃเป€เบˆเบฑเบเบเปˆเบญเบเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบ•เบฒเบกเบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ‚เบญเบ‡ "logger()" เบ›เบปเบเบเบฐเบ•เบด.

# ifdebug

#!/usr/bin/perl

เปƒเบŠเป‰เบขเปˆเบฒเบ‡เป€เบ„เบฑเปˆเบ‡เบ„เบฑเบ”;
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเป€เบ•เบทเบญเบ™;

เปƒเบŠเป‰ Benchmark;
เปƒเบŠเป‰เบ‚เปเป‰เบกเบนเบ™::Dumper;
$DEBUG เบ‚เบญเบ‡เบ‚เป‰เบญเบ = 0;

เปเบเป‰เบšเบฑเบ™เบซเบฒเบเปˆเบญเบ {
$msg เบ‚เบญเบ‡เบ‚เป‰เบญเบ = shift;

เบ–เป‰เบฒ ( $DEBUG ) {
เบžเบดเบก "DEBUG: $msg\n";
}
};

เป€เบงเบฅเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰(100000, {
'เบ”เบตเบšเบฑเบ' => เบเปˆเบญเบ {
debug( "เบ‚เปเป‰เบ„เบงเบฒเบกเบšเบฑเบ™เบ—เบถเบ A $0 เบœเปˆเบฒเบ™ process-id: $$". Dumper(\%INC) )
},
'ifdebug' => เบเปˆเบญเบ {
debug( "เบ‚เปเป‰เบ„เบงเบฒเบกเบšเบฑเบ™เบ—เบถเบ A $0 เบœเปˆเบฒเบ™ process-id: $$". Dumper(\%INC) ) เบ–เป‰เบฒ $DEBUG
},
});

เบกเบฒเป€เบšเบดเปˆเบ‡เบงเปˆเบฒ "Benchmark" เปเบกเปˆเบ™เบซเบเบฑเบ‡:

$> perl ifdebug
Benchmark: เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ 100000 iterations เบ‚เบญเบ‡เบ„เบปเบ‡เบ—เบตเปˆ, sub...
ifdebug: 0 wallclock secs (0.01 usr + 0.00 sys = 0.01 CPU) @ 10000000.00/s (n=100000)
(เบ„เบณเป€เบ•เบทเบญเบ™: เบเบฒเบ™เบŠเปเป‰เบฒเบ„เบทเบ™เปœเป‰เบญเบเป€เบเบตเบ™เป„เบ›เบชเบณเบฅเบฑเบšเบเบฒเบ™เบ™เบฑเบšเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰)
debug: 14 เป‚เบกเบ‡เบ•เบดเบ”เบเบฒ (13.18 usr + 0.04 sys = 13.22 CPU) @ 7564.30/s (n=100000)

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบซเบ™เบถเปˆเบ‡, เบฅเบฐเบซเบฑเบ”, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เบ„เบทเบเบฑเบ™เบญเป‰เบญเบเบ•เป‰เบญเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆ outputting เปƒเบ”
เบ‚เปเป‰เบกเบนเบ™ debugging เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบซเปˆเบงเบ‡, เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†เบšเปเปˆเบกเบตเบซเบเบฑเบ‡, เปƒเบŠเป‰เป€เบงเบฅเบฒ 14 เบงเบดเบ™เบฒเบ—เบต, เปเบฅเบฐเปƒเบ™
เบเปเบฅเบฐเบ™เบตเบญเบทเปˆเบ™เบฅเบฐเบซเบฑเบ”เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบ™เบถเปˆเบ‡เบฎเป‰เบญเบเบ‚เบญเบ‡เบงเบดเบ™เบฒเบ—เบต. เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบกเบตเบ„เบงเบฒเบกเบŠเบฑเบ”เป€เบˆเบ™เบžเปเบชเบปเบกเบ„เบงเบ™. เปƒเบŠเป‰ เบ
เบ•เบปเบงเปเบ› $DEBUG เบเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเบฐเป‚เบ—เบซเบฒ routine เบเปˆเบญเบ, เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบญเบตเบ‡เปƒเบชเปˆ smart
เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบžเบฒเบเปƒเบ™เบกเบฑเบ™.

เบเบฒเบ™เบ•เบฑเบ”เป„เบกเป‰เบ—เปˆเบญเบ™ if เบ”เบตเบšเบฑเบ (เบ„เบปเบ‡เบ—เบตเปˆ)
เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเป€เบญเบปเบฒเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒเบ•เบทเปˆเบกเบญเบตเบเป€เบฅเบฑเบเบ™เป‰เบญเบ, เป‚เบ”เบเปƒเบŠเป‰เป€เบงเบฅเบฒเบฅเบงเบšเบฅเบงเบก "DEBUG"
เบ„เบปเบ‡เบ—เบตเปˆ.

# ifdebug-เบ„เบปเบ‡เบ—เบตเปˆ

#!/usr/bin/perl

เปƒเบŠเป‰เบขเปˆเบฒเบ‡เป€เบ„เบฑเปˆเบ‡เบ„เบฑเบ”;
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเป€เบ•เบทเบญเบ™;

เปƒเบŠเป‰ Benchmark;
เปƒเบŠเป‰เบ‚เปเป‰เบกเบนเบ™::Dumper;
เปƒเบŠเป‰เบ„เบปเบ‡เบ—เบตเปˆ
DEBUG => 0
;

เปเบเป‰เบšเบฑเบ™เบซเบฒเบเปˆเบญเบ {
เบ–เป‰เบฒ (เบ”เบตเบšเบฑเบ) {
$msg เบ‚เบญเบ‡เบ‚เป‰เบญเบ = shift;
เบžเบดเบก "DEBUG: $msg\n";
}
};

เป€เบงเบฅเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰(100000, {
'เบ”เบตเบšเบฑเบ' => เบเปˆเบญเบ {
debug( "เบ‚เปเป‰เบ„เบงเบฒเบกเบšเบฑเบ™เบ—เบถเบ A $0 เบœเปˆเบฒเบ™ process-id: $$". Dumper(\%INC) )
},
'เบ„เบปเบ‡' => เบเปˆเบญเบ {
debug( "เบ‚เปเป‰เบ„เบงเบฒเบกเบšเบฑเบ™เบ—เบถเบ A $0 เบœเปˆเบฒเบ™ process-id: $$". Dumper(\%INC) ) เบ–เป‰เบฒ DEBUG
},
});

เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบ‡เบฒเบ™โ€‹เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ™เบตเป‰โ€‹เบœเบฐโ€‹เบฅเบดเบ”โ€‹เบ•เบฐโ€‹เบžเบฑเบ™โ€‹เบ”เบฑเปˆเบ‡โ€‹เบ•เปเปˆโ€‹เป„เบ›โ€‹เบ™เบตเป‰โ€‹:

$> perl ifdebug-เบ„เบปเบ‡เบ—เบตเปˆ
Benchmark: เบเปเบฒเบ™เบปเบ”เป€เบงเบฅเบฒ 100000 iterations เบ‚เบญเบ‡เบ„เบปเบ‡เบ—เบตเปˆ, sub...
เบ„เบปเบ‡เบ—เบตเปˆ: 0 wallclock secs (-0.00 usr + 0.00 sys = -0.00 CPU) @ -7205759403792793600000.00/s (n=100000)
(เบ„เบณเป€เบ•เบทเบญเบ™: เบเบฒเบ™เบŠเปเป‰เบฒเบ„เบทเบ™เปœเป‰เบญเบเป€เบเบตเบ™เป„เบ›เบชเบณเบฅเบฑเบšเบเบฒเบ™เบ™เบฑเบšเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰)
เบเปˆเบญเบ: 14 เป‚เบกเบ‡เบ›เบธเบเบงเบดเบ™เบฒเบ—เบต (13.09 usr + 0.00 sys = 13.09 CPU) @ 7639.42/s (n = 100000)

เบ„เบปเบ‡เบ—เบตเปˆ "DEBUG" เป€เบŠเบฑเบ”เบžเบทเป‰เบ™เบ”เป‰เบงเบเบ•เบปเบงเปเบ› $debug, เบขเบนเปˆเปƒเบ™เบˆเบธเบ”เบฅเบปเบš.
เบชเบนเบ™เบงเบดเบ™เบฒเบ—เบต, เปเบฅเบฐเบชเป‰เบฒเบ‡เบ‚เปเป‰เบ„เบงเบฒเบก "เบ„เบณเป€เบ•เบทเบญเบ™: เบŠเปเป‰เบฒเบ„เบทเบ™เปœเป‰เบญเบเป€เบเบตเบ™เป„เบ›เบชเบณเบฅเบฑเบšเบเบฒเบ™เบ™เบฑเบšเบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ–เบทเป„เบ”เป‰".
เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบเบฒเบ™เบ•เปเปˆเบฅเบญเบ‡. เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบตเบซเบเบฑเบ‡เป€เบเบตเบ”เบ‚เบถเป‰เบ™เปเบ—เป‰เป†, เปเบฅเบฐเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบถเปˆเบ‡เบกเบตเป€เบงเบฅเบฒเบŠเปเป‰เบฒเบ„เบทเบ™เปœเป‰เบญเบเป€เบเบตเบ™เป„เบ›
เบžเบงเบเป€เบฎเบปเบฒเบ„เบดเบ”เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบ‚เป 100000, เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰ "B::Deparse" เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเป€เบžเบทเปˆเบญเบเบงเบ”เบเบฒเป€เบšเบดเปˆเบ‡เปƒเบซเบกเปˆ.
เบฅเบฐเบซเบฑเบ”:

$> perl -MO=เป€เบŠเบปเบฒ ifdebug-constant

เปƒเบŠเป‰ Benchmark;
เปƒเบŠเป‰เบ‚เปเป‰เบกเบนเบ™::Dumper;
เปƒเบŠเป‰เบ„เบปเบ‡เบ—เบตเปˆ ('DEBUG', 0);
เปเบเป‰เบšเบฑเบ™เบซเบฒเบเปˆเบญเบ {
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเป€เบ•เบทเบญเบ™;
เปƒเบŠเป‰ 'refs' เบ—เบตเปˆเป€เบ„เบฑเปˆเบ‡เบ„เบฑเบ”;
0;
}
เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ„เปเบฒเป€เบ•เบทเบญเบ™;
เปƒเบŠเป‰ 'refs' เบ—เบตเปˆเป€เบ„เบฑเปˆเบ‡เบ„เบฑเบ”;
timethese(100000, {'เบเปˆเบญเบ', เบเปˆเบญเบ {
debug "เบ‚เปเป‰เบ„เบงเบฒเบกเบšเบฑเบ™เบ—เบถเบ $0 เบœเปˆเบฒเบ™ process-id: $$". Dumper(\%INC);
}
, 'เบ„เบปเบ‡เบ—เบตเปˆ', เบเปˆเบญเบ {
0;
}
});
ifdebug-constant syntax เบ•เบปเบเบฅเบปเบ‡

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™ เบ„เบปเบ‡เบ—เบตเปˆ() subroutine เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบ—เบปเบ”เบชเบญเบšเบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเบ”เป‰เบงเบเบกเบนเบ™เบ„เปˆเบฒเบ‚เบญเบ‡
เบ„เบปเบ‡เบ—เบตเปˆ "DEBUG": เบชเบนเบ™. เป€เบชเบฑเป‰เบ™เบ—เบตเปˆเบˆเบฐเบ—เบปเบ”เบชเบญเบšเป„เบ”เป‰เบ–เบทเบเบ›เบฑเบšเบ›เบธเบ‡เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™เบ—เบฑเบ™เบ—เบต, เปเบฅเบฐ
เบ—เปˆเบฒเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบซเบผเบฒเบเบเปˆเบงเบฒเบ™เบฑเป‰เบ™.

เป‚เบžเบชเบชเบฐเบ„เบฃเบดเบš


เป€เบญเบเบฐเบชเบฒเบ™เบ™เบตเป‰เป„เบ”เป‰เปƒเบซเป‰เบซเบผเบฒเบเบงเบดเบ—เบตเปƒเบ™เบเบฒเบ™เบเปเบฒเบ™เบปเบ”เบˆเบธเบ”เบฎเป‰เบญเบ™, เปเบฅเบฐเบเบฒเบ™เบเบงเบ”เบชเบญเบš
เบšเปเปˆเบงเปˆเบฒเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบ”เบฑเบ”เปเบ›เบ‡เปƒเบ”เบเปเปˆเป„เบ”เป‰เบ›เบฑเบšเบ›เบธเบ‡เป€เบงเบฅเบฒเปเบฅเปˆเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”.

เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบชเบธเบ”เบ—เป‰เบฒเบ, เบˆเบปเปˆเบ‡เบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™ (เปƒเบ™เป€เบงเบฅเบฒเบ‚เบฝเบ™) เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบœเบฐเบฅเบดเบ” a
เป‚เบ„เบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เบ›เบฐโ€‹เป‚เบซเบเบ”โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบเบฒเบ™โ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบชเบนเบ™โ€‹เบซเบผเบทโ€‹เบ—เบฒเบ‡โ€‹เบฅเบปเบšโ€‹เปเบฅเบฐโ€‹เบซเบผเบฑเบโ€‹เบเบฒเบ™โ€‹เบžเบทเป‰เบ™โ€‹เบ–เบฒเบ™โ€‹เบ™เบตเป‰โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เป€เบ›เบฑเบ™โ€‹
เบ‚เบฝเบ™เป€เบ›เบฑเบ™: เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ” เป‚เบ„เบ‡เบเบฒเบ™ เบกเบต เบŠเป‰เบฒ เป‚เบ”เบเบ„เปเบฒเบ™เบดเบเบฒเบกเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ. เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปเบ™เปˆเบ™เบญเบ™
เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเป€เบเบทเบญเบšเบ—เบฑเบ™เบ—เบต, เปเบ•เปˆเบกเบฑเบ™เบˆเบฐเบšเปเปˆเป€เบฎเบฑเบ”เบซเบผเบฒเบ, เบ™เบตเป‰เปเบกเปˆเบ™เบซเบผเบฒเบ
เบซเบ™เบถเปˆเบ‡โ€‹เบ›เบฐโ€‹เบชเบดเบ”โ€‹เบ—เบดโ€‹เบžเบฒเบšโ€‹:

$> perl -e 0

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ—เบตเปˆเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบกเปˆเบ™เบงเบฝเบเบชเปเบฒเบฅเบฑเบš "p5p".

เปƒเบŠเป‰ perlperf เบญเบญเบ™เป„เบฅเบ™เปŒเป‚เบ”เบเปƒเบŠเป‰เบšเปเบฅเบดเบเบฒเบ™ onworks.net


เป€เบŠเบตเบšเป€เบงเบต เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบตเป€เบฎเบฑเบ”เบงเบฝเบเบŸเบฃเบต

เบ”เบฒเบงเป‚เบซเบผเบ”เปเบญเบฑเบš Windows เปเบฅเบฐ Linux

  • 1
    เบŠเบฑเป‰เบ™เบซเป‰เบญเบ‡เบเบฒเบ™
    เบŠเบฑเป‰เบ™เบซเป‰เบญเบ‡เบเบฒเบ™
    OfficeFloor เปƒเบซเป‰ inversion เบ‚เบญเบ‡
    เบเบฒเบ™โ€‹เบ„เบงเบšโ€‹เบ„เบธเบก couplingโ€‹, เบกเบตโ€‹เบ‚เบญเบ‡โ€‹เบ•เบปเบ™โ€‹: - เบ‚เบถเป‰เบ™โ€‹เบเบฑเบšโ€‹
    เบเบฒเบ™เบชเบฑเบเบขเบฒ - เบเบฒเบ™เบชเบฑเบเบขเบฒเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡ -
    เบเบฒเบ™เบชเบตเบ” thread เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก
    เบขเป‰เบฝเบกเบขเบฒเบก ...
    เบ”เบฒเบงเป‚เบซเบฅเบ” OfficeFloor
  • 2
    DivKit
    DivKit
    DivKit เป€เบ›เบฑเบ™เปเบซเบผเปˆเบ‡เป€เบ›เบตเบ” Server-Driven
    เป‚เบ„เบ‡เบฎเปˆเบฒเบ‡เบเบฒเบ™ UI (SDUI). เบกเบฑเบ™เบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™
    เป€เบ›เบตเบ”เบ•เบปเบงเบเบฒเบ™เบญเบฑเบšเป€เบ”เบ”เบ—เบตเปˆเบกเบฒเบˆเบฒเบเป€เบŠเบตเบšเป€เบงเบตเป€เบžเบทเปˆเบญ
    เบชเบฐโ€‹เบšเบฑเบš app เบ—เบตเปˆโ€‹เปเบ•เบโ€‹เบ•เปˆเบฒเบ‡โ€‹เบเบฑเบ™โ€‹. เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, เบกเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™
    เปƒเบŠเป‰เป€เบžเบทเปˆเบญ...
    เบ”เบฒเบงเป‚เบซเบฅเบ” DivKit
  • 3
    เบ•เบปเบงเบ›เปˆเบฝเบ™เบเปˆเบญเบ
    เบ•เบปเบงเบ›เปˆเบฝเบ™เบเปˆเบญเบ
    เบœเบปเบ™เบ›เบฐเป‚เบซเบเบ”เปƒเบ™เบเบฒเบ™เปเบ›เบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบ•เปˆเบฒเบ‡เป†
    เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบชเบฐเบซเบกเบฑเบ. เบœเบนเป‰เปƒเบŠเป‰ Shadowrocket
    เบ„เบงเบ™เปƒเบŠเป‰ ss, ssr เบซเบผเบท v2ray เป€เบ›เบฑเบ™เป€เบ›เบปเป‰เบฒเปเบฒเบ.
    เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบžเบตเปˆเบก &remark= เปƒเบชเปˆ
    Telegram-like HT...
    เบ”เบฒเบงเป‚เบซเบฅเบ”เบ•เบปเบงเปเบ›เบ‡เบชเบฑเบ™เบเบฒเบ™เบเปˆเบญเบ
  • 4
    เบŠเบฑเบ
    เบŠเบฑเบ
    SWASH เปเบกเปˆเบ™เบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเบกเบตเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ—เบปเปˆเบงเป„เบ›
    เป€เบ„เบทเปˆเบญเบ‡โ€‹เบกเบทโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบฒเบ™โ€‹เบˆเปเบฒโ€‹เบฅเบญเบ‡โ€‹เบšเปเปˆโ€‹เบชเบฐโ€‹เบซเบกเปเปˆเบฒโ€‹เบชเบฐโ€‹เป€เบซเบกเบตโ€‹,
    เบšเปเปˆ hydrostatic, เบšเปเปˆเบกเบตเบžเบทเป‰เบ™เบœเบดเบง,
    เบ›เบฐเบเบปเบ”เบเบฒเบ™เป„เบซเบผเบงเบฝเบ™ เปเบฅเบฐเบเบฒเบ™เบ‚เบปเบ™เบชเบปเปˆเบ‡
    เปƒเบ™โ€‹เบ™โ€‹เป‰โ€‹เปโ€‹เบฒ coastal เป€เบ›เบฑเบ™ ...
    เบ”เบฒเบงเป‚เบซเบฅเบ” SWASH
  • 5
    VBA-M (เป€เบเบฑเบšเป„เบงเป‰ - เบ•เบญเบ™เบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Github)
    VBA-M (เป€เบเบฑเบšเป„เบงเป‰ - เบ•เบญเบ™เบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Github)
    เป‚เบ„เบ‡เบเบฒเบ™เป„เบ”เป‰เบเป‰เบฒเบเป„เบ›
    https://github.com/visualboyadvance-m/visualboyadvance-m
    เบ„เบธเบ™โ€‹เบฅเบฑเบโ€‹เบชเบฐโ€‹เบ™เบฐ: Cheat creationsave statesmulti
    เบฅเบฐเบšเบปเบš, เบชเบฐเบซเบ™เบฑเบšเบชเบฐเบซเบ™เบนเบ™ gba, gbc, gb, sgb,
    sgb2Tu...
    เบ”เบฒเบงเป‚เบซเบฅเบ” VBA-M (เป€เบเบฑเบšเป„เบงเป‰ - เบ•เบญเบ™เบ™เบตเป‰เบขเบนเปˆเปƒเบ™ Github)
  • 6
    Stacer
    Stacer
    Linux System Optimizer เปเบฅเบฐเบเบฒเบ™เบ•เบดเบ”เบ•เบฒเบก
    Github Repository:
    https://github.com/oguzhaninan/Stacer.
    เบœเบนเป‰เบŠเบปเบก: เบœเบนเป‰เปƒเบŠเป‰เบชเบธเบ”เบ—เป‰เบฒเบ/เป€เบ”เบฑเบชเบ—เบฑเบญเบš. เบœเบนเป‰เปƒเบŠเป‰
    เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš: Qt. เบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบฅเปเบเบฅเบก La...
    เบ”เบฒเบงเป‚เบซเบฅเบ” Stacer
  • เป€เบžเบตเปˆเบกเป€เบ•เบตเบก ยป

Linux เบ„เบณ เบชเบฑเปˆเบ‡

Ad