Jak se hlasi chybove stavy?
Martin Povolný
xpovolny na aurora.fi.muni.cz
Sobota Červen 7 21:28:37 MEST 2003
Dne: Sat, Jun 07, 2003 at 04:21:16PM +0000, Honza Pazdziora napsal:
> On Fri, Jun 06, 2003 at 10:44:50PM +0200, Ondrej Koala Vacha wrote:
> > > pouziji na zjisteni povahy chyby metody err ci errstr na tom samem
> > > objektu, na kterem ta puvodni metoda selhala:
> > >
> > > my $sth = $dbh->prepare($SQL) or die $dbh->errstr;
> > >
> > > Dalsi moznosti je byt javovsky a moderni :-) a nevracet undef, anybrz
> > > vyjimku. Pri volani se to obali evalem a najde v $@.
> >
> > Jeste mozna vracet undef ve skalarnim a seznam/hash v seznamovem
> > kontextu. Ma to vyhodu volnosti: kdyz chci, muzu se dozvedet vice.
>
> Klasicky zpusob volani metod nebo funkci je ale
>
> if (not $result = $obj->method) {
> # zjisti, co bylo spatne
> }
>
> Tedy provede se normalni volani, a teprve kdyz selze, zjisti se
> dodatecne informace o tom selhani. Pokud by se ty dodatecne informace
> zjistovaly dalsim volanim te same metody
>
> if (not $result = $obj->method) {
> @error = $obj->method;
> }
>
> hrozi nebezpeci, ze napodruhe metoda jiz uspeje, s cimz ale hlavni tok
> vypoctu nepocita.
>
> A zavolat tu metodu zaroven ve skalarnim i seznamovem kontextu asi
> nepujde.
>
> Jak by vypadalo pouziti Vami navrzeneho postupu?
>
Podle me je to docela jasne. V jednodussich/jednoucelovych programech na
chybove stavy casto kasleme, takze volani bude:
$result = $obj->method
pokud budu psat serioznejsi program, budu psat:
($result, $error) = $obj->method
if ($error) {
# dale zkoumej chybu
}
Jak proste mily Adeltone!
--
Martin Povolný, xpovolny na fi.muni.cz, http://www.fi.muni.cz/~xpovolny
Další informace o konferenci Perl