[gull] email

Daniel Cordey dc at mjt.ch
Thu Sep 22 16:26:54 CEST 2005


On Thursday 22 September 2005 15:47, Frederic Schutz wrote:

> Je ne peux pas parler pour sed, mais ce n'est pas forcement le cas pour
> Perl. 

A ma connaissance, tous les programmes utilisant des RE font appel a :

- regcomp(3)

	"...regcomp is used to compile a regular expression into a form that is 
	 suitable  for  subsequent regexec searches.

	 regcomp is supplied with preg, a pointer to a pattern buffer storage area;
	 regex, a pointer to the null-terminated string and cflags, flags used to
	 determine the type of compilation.

	 All regular expression searching must be done via a compiled pattern buffer,
	 thus regexec must always be supplied with the address of a regcomp
	 initialized pattern buffer..."


- regexex(3)

	"... regexec is used to match a null-terminated string  against  the 
	 precompiled  pattern  buffer, preg. ..."


C'est relativement incontournable :-)

> Par exemple, "Programming Perl" recommande d'utiliser 
>
>      /one/ || /two/
>
> au lieu de
>
>      /one|two/
>
> La justification est que comme les 2 expressions sont tres simples, elles
> peuvent etre optimisees en utilisant l'algorithme de Bayer-Moore, qui est
> tres efficace. Moore. Par contre, des qu'il y a un "|" dans
> l'expression, il faut
> utiliser du code generique qui est beaucoup plus lent.

Je suspecte que Perl effectue une pre-optimisation des ER, avant de faire 
appel aux deux fonctions citees plus-haut. 

dc



More information about the gull mailing list