!
No english translation, sorry.
cover
Book Review : Perl Hacks: Tips & Tools for Programming, Debugging, and Surviving
Author(s)   : chromatic with Damian Conway and Curtis "Ovid" Poe
Publisher   : O'Reilly (2006)
ISBN        : 0596526741
Language    : English

Kniha je zbierka #101 Perlových tipov a trikov. Rôzneho zamerania. Od jednoduchých po zložité, od užitočných po "pre krásu".

Čo myslíte spraví tento program?

#!/usr/bin/perl -w                           # how to (ab)use substr
use strict;

my $pi='3.14159210535152623346475240375062163750446240333543375062';

     substr     ($^X,0)=
       substr   ($pi,-6);map{
         substr ($^X,$.++,1)=chr(
          substr($pi,21,2)+
          substr($pi,$_,2))}(12,28,-18,-6,-10,14);map{$^O=$"x(
         substr ($pi,-5,2));
       substr   ($^O,sin(++$a/8)*32+
     substr     ($pi,-2)/2+1,1)=$_;
   substr       ($^O,sin($a/4)*(
 substr         ($pi,2,2))+
substr          ($pi,-7,-5)-1,1)=$_;print"$^O$/";eval($^X.('$b,'x3).
substr          ($pi,-3,1).'.'.
 substr         ($pi,9,2));}(map{chr($_+
   substr       ($pi,21,2))}(
     substr     ($pi,8)x3)=~/../g);

#101
# source http://www.perlmonks.org/index.pl?node_id=77619

To bol posledný hack - "Learn from Obfuscations" na rozlúčku. človek nemusí vždy robiť aby sa učil, veľakrát sa viac naučí hrou. A k tomu dáva Perl bohaté možnosti. Zopár viac príkladov JAPH.

Tu sú jednotlivé kapitoly podľa ktorých sú tipy a triky zotriedené:

  • Chapter 1, Productivity Hacks
  • Chapter 2, User Interaction
  • Chapter 3, Data Munging
  • Chapter 4, Working with Modules
  • Chapter 5, Object Hacks
  • Chapter 6, Debugging
  • Chapter 7, Developer Tricks
  • Chapter 8, Know Thy Code
  • Chapter 9, Expand Your Perl Foo

Z každého rožku trošku. Dobre sa to číta, lebo každy hack ma tak 2 - 3 strany (2,6 v priemere). Ked niečo človeka nezaujíma ľahko sa to dá preskočiť a pokračovať. Čo som preskočil bola ukážka SDL::App ako sa dá naprogramovať jednoduchá grafická hra v Perle. To mi celkom ako hack ani trik nepripadalo ale niekomu sa to môže páčiť. Oveľa viac krát som sa však pristihol pri tom, že som si povedal "a vlastne naozaj!" alebo "šikovné! to bolo určite niekde schované v manuálovej stránke...".

Tak či tak tu je môj zoznam hackov, tipov a trikov, ktoré sa mi páčili v tejto knihe:

#4 ako produktivity hack doporučujú autori používať alias aby si človek zjednodušil život a spravil si shortcut-y na veci čo sa často opakujú, poprípade ťažko pamätajú.

#17 ukážka toho ako sa pýtať otázky pri inštalacii/konfigurácii modulu. Ukazujú aj ako pomocou Data::Dumper sa dá generovať kód. V tomto prípade sa z otázok vygeneruje modul, ktorý obsahuje odpovede.

#21 predstavuje Spreadsheet::Read ktorý podľa obsahu súboru, Excel || OpenOffice || CSV, načíta spreadsheet a vráti jeho obsah v unifikovanej forme. Vcelku užitočné keď sa mieša Windows a Linux tabuľkový vstup.

#23 príklad použitia %EXPORT_TAGS modulu Exporter na vytvorenie knižnice SQL príkazov.

#26 použitie closures na generovanie iterácií, keď treba poprechádzať všetky IPčky z niekoľko rozsahov. Bud si ich vygenerujeme do jedného obrovského poľa, alebo si spravíme niekoľko cyklov v kóde, alebo si spravíme closure, ktorý to všetko zakryje. Asi najprofesionálnejšie by bolo spraviť si modul ale to môže byť v niektorých prípadoch kanón na vrabca.

#27 use Want 'howmany'; Pomocou howmany() môže funkcia/metóda zistiť koľko návratových hodnôt sa od nej očakáva.

#34 makrá v Perle pomocu Filter::Macro

#36 ukazuje ako sa dá override-ovať build-in funkcia. V tomto prípade funkcia exit(). Stačí použiť use subs 'exit';.

#38 pomocou use SUPER; super(); sa dá nahradit $self->SUPER::func_name(), je tu aj ukážka toho ako sa dá "zomrieť" s objektom pomocou Exception::Class

#45 use Scalar::Util 'blessed'; funkcia blessed otestuje či je premenná pointer na objekt.

#54 predstavuje Smart::Comments ktoré sú zaujímavé ale use Log::Log4perl qw(:resurrect); dokáže "premeniť" komentáre na plnohodnotné Log4perl logovacie príkazy s log levelmi čo je ešte zaujímavejšie.

#55 pomocou caller() je tu ukázané ako sa dá spolu s chybovou hláškou vypísať aj kus kódu programu kde nastala.

#57 local *__ANON__ = "meno"; "pomenuje" anonymnú funkciu. Lepšie sa potom hľadá kde nastala výnimka.

#59 pomocu Devel::Command sa dajú pridávať vlastné príkazy do perl debuggeru.

#63 Term::ANSIColor zafarbí terminál, IPC::Open3 vie "zachytiť" štandardný vstup aj výstup

#65 podáva myšlienku zakomponovať testy do "živého" produkčného kódu, tak že naždý N-tý request sa "preženie" testami. Podľa štatistiky skôr či neskôr by sa mal problém so vstupom objaviť.

#74 v tomto tipe som si všimol, že metóda can() vracia CODE ref. Napríklad: $code_ref = $objeckt->can('toto');, alebo $code_ref = Nejaky::Modul->can('tamto');

#75 predstavuje magický hash %main::, ktorý obsahuje symboly.

#77 - #83 v týchto tipoch sa pohrávajú autori s kódom. Ako sa dá dekompilovať na OP kódy, ako sa dá v ňom vyhladávať, meniť. Zistiť ktorá časť zaberá najviac pamäte. Ako si pridať vlastný warning, že je niečo podozrivé už pri kompilácií.

#87 pomocou use Hash::Util 'lock_keys'; sa dajú zamknúť hashe aby sa nestalo že by sa omylom pristupovalo ku hash kľúču ktorý neexistuje.

#88 Scope::Guard postráži premennú a keď má opustiť scope a má byť uvolnená z pamäte tak sa Scope::Guard postará o to aby sa sputila zadefinovaná funkcia. Vcelku šikovné na "upratanie" si po sebe.

#89 ukazuje ako sa dajú písať filtre-layers pre vstupy a výstupy z filehandle. use PerlIO::via; open $fh, '>:via(Filter1):via(Filter2)', 'subor.dat'

#91 use Fatal; ušetrí písanie kódu aby sa nemuselo každé volanie funkcie (open, print, close, ...) spodmienkovávať - or die $!.

#92 use Contextual::Return; vie "zistiť" aká návratová hodnota je očakávaná od funkcie.

#93 pomocou Contextual::Return je tu implementovaná živá premenná $timer.

#96 predstavuje P5NCI pomocou ktorého sa dajú volať C-čkové knižnice bez nutnosti mať kompilátor k dispozícií.

#98 pomocou Regexp::Assemble je tu ukázané ako sa dá vytvoriť hash, ktorý má ako kľúče regulárne výrazy. Na ukážku je pomocou neho vytvorený IRC bot.

Hodnotenie: 4/4
1 1 1 1

10. Apr 2008
Jozef