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