Perl a velky skalar

Honza Pazdziora adelton na fi.muni.cz
Středa Duben 4 11:30:34 MEST 2001


On Wed, 4 Apr 2001 09:13:40 GMT, Pavel Šmerk <xsmerk na informatics.muni.cz> wrote:
> 
> zase budu otravovat s par problemy a budu rozhodne vdecny za veskere
> rady.

Followups set.

> Jak lze "prejmenovat" promennou? Mam velkou promennou $vse a chtel bych
> k ni pristupovat pod jmenem $_, abych nemusel psat $vse =~ /.../. $_ =
> $vse; undef $vse; ale kopiruje obsah, pricemz se (na chvili) zabirana
> pamet  zdvojnasobi. Asi to navic i neco trva. Jde to udelat nejak lepe?

	$vse = 'jezek';
	*_ = \$vse;
	print "$_\n";
	__END__
	jezek

Nicmene to, co chces, se da udelat i

	for ($vse) {
		s/neco/toto/g;
	}

a ten aliasing mas zadarmo.

> Dalsi nejasnost - mam soubor a chci v nem udelat nejake nahrady. Muzu ho
> cist po nejakych kusech, delat nahrady a zase zapisovat. Taky ho muzu
> precist cely naraz, udelat nahrady a zapsat. Je neco z toho rychlejsi?

Zalezi. Zalezi, jak ty nahrady delas a co predpokladas o tech datech.

> Nejvaznejsi problem mam ale tento: mam 20MB v $_, program zabira neco
> pres 20MB. Udelam nekolik prikazu typu "s/...(...)...(...).../.../sg;",
> $_ ma stale zhruba 20MB, ovsem program zabira skoro 300MB pameti. Pokud
> jsem to spravne sledoval, kazde to nahrazeni zvetsi zabiranou pamet. Nic
> jineho krome s///sg nedelam. Jak je to mozne a jak se tomu lze branit?
> (Zkusil jsem to psat jako "1 while s///s;", to tu pamet nakonec zabralo
> taky, jenom to bylo asi 30krat pomalejsi.)

Potrebujeme videt presny kod.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 .project: Perl, mod_perl, DBI, Oracle, auth. WWW servers, XML/XSL, ...
Petition for a Software Patent Free Europe http://petition.eurolinux.org
------------------------------------------------------------------------


Další informace o konferenci Perl