Perl umφ provßd∞t substituci zalo₧enou na pou₧itφ regulßrnφch °et∞zc∙. Substituce se provßdφ pomocφ funkce s, kterΘ je podobnß substituci ve vi editoru. Pro substituci se pou₧ije srovnßvacφ operßtor =~. Pokud je srovnßvacφ operßtor vynechßn provßdφ se substituce na prom∞nnΘ $_.
Chcete-li nahradit v²skyt °et∞zce london °et∞zcem London v prom∞nnΘ $sentence pou₧ijte p°φkaz
$sentence =~ s/london/London/Je-li °et∞zec ulo₧en² v prom∞nnΘ $_, pak mß p°φkaz pro uvedenou nßhradu tvar
s/london/London/VÜimn∞te si, ₧e dva regulßrnφ °et∞zce jsou obklopeny celkem t°emi lomφtky.
P°φkaz vracφ poΦet proveden²ch substitucφ, v tomto p°φpad∞ 0 (false) nebo 1 (true). V²raz pro substituci je tedy mo₧nΘ pou₧φt i jako podmφnku v p°φkazu if.
s/london/London/gop∞t je mo₧nΘ pou₧φt prom∞nnou $_.
Chceme-li nahradit v²skyt lOndon, lonDON, LoNDoN atd., °et∞zcem London m∙₧eme pou₧φt p°φkaz
s/[Ll][Oo][Nn][Dd][Oo][Nn]/London/gExistuje vÜak jednoduÜÜφ zp∙sob, a to pou₧φt volbu i (pro "ignore case"). P°φkaz
s/london/London/giprovede globßlnφ substituci s ignorovßnφm typu pφsmen (malß, velkß).
$_ = "Lord Whopper of Fibbing"; s/([A-Z])/:\1:/g; print "$_\n";nahradφ ka₧dΘ velkΘ pφsmeno stejn²m pφsmenem obklopen²m z ka₧dΘ strany dvojteΦkou. Vytiskne se tedy :L:ord :W:hopper of :F:ibbing. Prom∞nnΘ $1,...,$9 jsou read-only; nenφ mo₧nΘ je modifikovat.
DalÜφ p°φklad je p°φklad testovßnφ
if (/(\b.+\b) \1/) { print "Slovo $1 se opakuje\n"; }OznaΦφ ka₧dΘ opakujφcφ se slovo. Ka₧dΘ \b p°edstavuje hranici slova a znak .+ p°edstavuje libovoln² neprßzdn² °et∞zec, tedy \b.+\b p°edstavuje cokoli mezi dv∞mi hranicemi slova, tedy slovo. Pou₧ili jsme zßvorky a obsah zßvorek byl ulo₧en jako specißlnφ znak \1. Tento slecißlnφ znak m∙₧eme pou₧φt v danΘm regulßrnφm v²razu. Ve zbytku programu m∙₧eme pracovat s prom∞nnou $1, kterß mß stejn² obsah jako specißlnφ znak \1.
Nßsledujφcφ p°φklad vym∞nφ prvnφ a poslednφ znak na °ßdku. ╪ßdek je ulo₧en² v prom∞nnΘ $_
s/^(.)(.*)(.)$/\3\2\1/Znaky^ a $ reprezentujφ zaΦßtek a konec °ßdku. V \1 je ulo₧en prvnφ znak; v \2 je cokoli a₧ do poslednφho znaku, kter² je ulo₧en v \3. Celß °ßdka je tedy nahrazena °ßdkou s prohozen²mi znaky \1 a \3.
P°i vyhledßvßnφ jsou napln∞ny i specißlnφ read-only prom∞nnΘ
$` a
$& a
$', kterΘ je mo₧nΘ dßle v programu pou₧φt. Prom∞nnΘ jsou napln∞ny nßsledujφcφm zp∙sobem:
$` zaΦßtek °et∞zce, a₧ do vyhledßvanΘho pod°et∞zce
$& vyhledßvan² pod°et∞zec
$' konec °et∞zce od vyhledßvanΘho pod°et∞zce.
Tedy pokud naplnφme prom∞nnou $_ a provedeme uvedenΘ vyhledßnφ pod°et∞zce pp
v prom∞nnΘ $_
$_ = "Lord Wopper of Fibbing"; /pp/;jsou vÜechny nßsledujφcφ v²razy jsou pravdivΘ: (P°ipome≥me, ₧e eq je °et∞zcovΘ porovnßnφ.)
$` eq "Lord Wo"; $& eq "pp"; $' eq "er of Fibbing";
P°ed vyhledßvßnφm se provßdφ konverze prom∞nn²ch, kterΘ jsou pou₧ity uvnit° lomφtek. Tedy p°φkaz
$search = "the"; s/$search/xxx/g;nahradφ ka₧d² v²skyt °et∞zce the v prom∞nnΘ $_ °et∞zcem xxx. Pokud chcete nahradit ka₧d² v²skyt °et∞zce there, pak nezadßvejte s/$searchre/xxx/, nebo¥ by se nahrazovalo jmΘno prom∞nnΘ $searchre jejφm obsahem. Ale jmΘno prom∞nnΘ uzav°ete do slo₧en²ch zßvorek, sprßvn² p°φkaz tedy vypadß
$search = "the"; s/${search}re/xxx/;
$sentence =~ tr/abc/edf/P°φkaz vracφ poΦet proveden²ch nahrazenφ. Je tedy mo₧nΘ nap°φklad p°φkazem if testovat, zda se nahrazenφ provedlo nebo ne.
if ( $sentence =~ tr/abc/edf/) { print "nahrazeni provedeno\n"; } else { print "v retezci se nevyskytuji znaky abc\n"; }
V∞tÜina specißlnφch znak∙ pro RE se ve funkci tr nepou₧φvß. Nßsledujφcφ p°φklad zjiÜ¥uje poΦet hv∞zdiΦek v prom∞nnΘ $sentence a zjiÜt∞nΘ Φφslo ulo₧φ do prom∞nnΘ $count.
$count = ($sentence =~ tr/*/*/);PomlΦka znamenß znaky mezi explicitn∞ uveden²mi znaky.
tr/a-z/A-Z/;
23 Amp, James Wa(tt),Zkuste jeÜt∞ tuto modifikaci: vÜechny zdvojenΘ znaky budou v zßvorkßch krom∞ prvnφho zdvojenΘho znaku na °ßdku.
Nakonec m∙₧eme zkusit program modifikovar tak, aby vyhledßvan² °et∞zec p°ebφral jako parametr z p°φkazovΘho °ßdku. P°edpoklßdßm ,₧e se vßÜ program jmenuje pocitadlo.pl. SpouÜtφte jej nap°. p°φkazem
perl pocitadlo.plPokud program spustφte s n∞kolika parametry p°φkazem
perl pocitadlo.pl prvni druhy atdjsou tyto parametry ulo₧eny v poli @ARGV. Tedy v naÜem p°φpad∞ je v $ARGV[0] °et∞zec prvni a v $ARGV[1] °et∞zec druhy a v $ARGV[2] °et∞zec atd. Upravte program tak, aby oΦekßval jeden parametr a poΦφtal pouze °ßdky, na kter²ch se vyskytne °et∞zec udan² jako parametr. ╪et∞zec op∞t vyznaΦte na °ßdce pou₧itφm zßvorek.