Producent/konzument (generator?) v Perlu?

Jan Kasprzak kas na fi.muni.cz
Úterý Duben 5 11:44:39 MEST 2005


	Zdravim,

	jak byste v Perlu implementovali takovy ten generator
- jednu rutinu ktera na ruznych mistech dava nejake hodnoty,
a metodu na ziskavani tech hodnot postupne jednu za druhou.
Myslim ze treba C++ neco takoveho ma. Jde mi o to, ze mam nejakou
dost velkou mnozinu hodnot (potencialne prilis velkou na to abych
z ni udelal seznam a ten predaval). Cili bych potreboval neco jako

# Zpracovani - konzument
$generator->init;
while (my $hodnota = $generator->getnext) {
	zpracuj_hodnotu($hodnota);
}
$generator->finish;

# Generovani - producent
sub telo_generatoru {
	my $self = shift;
	for my $select (@{$self->{selecty}) {
		$sth = $dbh->prepare($select);
		$sth->execute;
		while (my $ref = $sth->fetchrow_arrayref) {
			$self->yield($ref->[0]);
			$self->yield($ref->[1]);
		}
		$sth->finish;
	}
	$self->yield(undef);
}

Cili problem je, ze ty hodnoty generuju na vice mistech (napriklad
z vice selectu) a potrebuju jich budto vygenerovat vic najednou
nebo si nejak zapamatovat stav - ktery select ted zrovna provadim
a na jakem jsem miste. Samozrejme si umim uchovani stavu naimplementovat,
ale pokud by byla fakt nejaka rozumna podpora pro generatory, tak by to
bylo prehlednejsi.

-Y.

-- 
| Jan "Yenya" Kasprzak  <kas at {fi.muni.cz - work | yenya.net - private}> |
| GPG: ID 1024/D3498839      Fingerprint 0D99A7FB206605D7 8B35FCDE05B18A5E |
| http://www.fi.muni.cz/~kas/   Czech Linux Homepage: http://www.linux.cz/ |
> Whatever the Java applications and desktop dances may lead to, Unix will <
> still be pushing the packets around for a quite a while.      --Rob Pike <


Další informace o konferenci Perl