V Perlu je možné modifikátory regulárního výrazu vložit přímo do samotného regulárního výrazu. Např. výraz odpovídající "a" bez ohledu na velikost písmen se dá napsat jako
/a/i
nebo se modifikátor může vložit přímo do výrazu jako /(?i)a/
. To se hodí, pokud výraz není součástí zdrojového kódu, ale pochází odjinud.Perl 5.6 neměl nic proti tomu, pokud se i modifikátor globálního hledání
//g
vložil do výrazu jako /(?g)/
a všechno fungovalo, jak má, i když v dokumentaci to nebylo nikde popsáno. Perl 5.8 se to ovšem rozhodl změnit a mě připravit opravdu perné chvilky :)Následující příklad funguje jen v Perlu 5.6:
while ('xabyaczad' =~ m/(?g)a(.)/) { print $1; }
Pro Perl 5.8 je potřeba g "vytáhnout ven":
while ('xabyaczad' =~ m/a(.)/g) { print $1; }
Laskaví uživatelé RSS feedů nechť přijmou omluvu za několikadenní výpadek a za pomoc při řešení děkuju Marovi a Stěpánkovi.
Žádné komentáře:
Okomentovat