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