Vlákno názorů k článku Perličky: objektové výjimky od wayan - Občas používám Exception::Class, i když s ním mám...

  • Článek je starý, nové názory již nelze přidávat.
  • 16. 7. 2008 16:33

    wayan (neregistrovaný)

    Občas používám Exception::Class, i když s ním mám malý "problém", který je dobře vidět i ve vašem příkladu:

    VelkyParametr->throw(
    		message => 'Parametr je prilis velky',
    		limit => $limit)
    

    Podle mě je totiž parametr message nadbytečný a měl by být implicitně daný třídou výjimky. Jaké rozumné message lze v kombinaci s VelkyParametr použít?

    Samozřejmě vypisovanou zprávu může určovat přímo třída bez message - dá se předefinovat metoda full_message v třídě výjimky. Zaráží mě ovšem, že na takovou věc nepamatoval autor Exception::Class v syntaxi importu. Jako by s takovým použitím příliš nepočítal.

    Máte na to nějaký názor?

  • 17. 7. 2008 21:01

    pht (neregistrovaný)

    Myslim si, ze jeho hlavnim ucelem je byt proste retezcovym atributem, jelikoz hodne vyjimek asi nejaky retezcovy atribut pouziva. (Napr. $!, nebo chybovou hlasku z SQL nebo LDAP nebo jineho systemu ... s VelkymParametrem asi moc ne.)

    Trochu divne ale je to, ze je to jediny atribut ktery se pouzije pri stringifikaci. Takze kdyz tam message nedate, tak vam neosetrena vyjimka nic nevypise a potichu chcipne. Samozrejme se da pretizit stringifikace, nebo nainstalovat rozumny SIG{__DIE__}, ale to je v rozporu s predikatem 'Laziness'. To pretizeni by melo jit celkem bezbolestne:

    package MyExc;
    
    our @ISA = qw/Exception::Class::Base/;
    
    sub full_message {
            return "blabla";
    }
    package RadaException;
    use Exception::Class (
            'SpatnyParametr' => {
                    isa             => 'MyExc'
            },
    ...a dal normalne
    

    a nebo to muzete znasilnit:

    *Exception::Class::Base::full_message = sub { ... };