POD2-RU
view release on metacpan or search on metacpan
lib/POD2/RU/perlretut.pod view on Meta::CPAN
ÐÑе одна инÑеÑеÑÐ½Ð°Ñ ÑÑÑка в Ñом, ÑÑо Ñлаг C<s///r> позволÑÐµÑ Ð´ÐµÐ»Ð°ÑÑ ÑепоÑки
замен:
$x = "Cats are great.";
print $x =~ s/Cats/Dogs/r =~ s/Dogs/Frogs/r =~ s/Frogs/Hedgehogs/r, "\n";
# напеÑаÑÐ°ÐµÑ "Hedgehogs are great."
C<s///e> - модиÑикаÑÐ¾Ñ Ð²ÑполнениÑ, ÑÑÑеÑÑвÑÑÑий ÑпеÑиалÑно Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка и заменÑ.
C<s///e> воÑпÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð°Ð¼ÐµÐ½ÑемÑй ÑекÑÑ,как код Perl, а не ÑÑÑÐ¾ÐºÑ Ð² двойнÑÑ
кавÑÑкаÑ
.
ÐнаÑение, коÑоÑое возвÑаÑÐ°ÐµÑ ÐºÐ¾Ð´ подÑÑавлÑеÑÑÑ
вмеÑÑо найденной подÑÑÑоки. C<s///e> полезно, еÑли вам нÑжно ÑделаÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе
вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð² пÑоÑеÑÑе Ð·Ð°Ð¼ÐµÐ½Ñ ÑекÑÑа. Ð ÑÑом пÑимеÑе ÑаÑÑÑиÑÑваеÑÑÑ
ÑаÑÑоÑа Ñимволов в ÑÑÑоке:
$x = "Bill the cat";
$x =~ s/(.)/$chars{$1}++;$1/eg; # конеÑнÑй $1 заменÑÐµÑ Ñимвол на Ñамого ÑебÑ
print "frequency of '$_' is $chars{$_}\n"
foreach (sort {$chars{$b} <=> $chars{$a}} keys %chars);
ÐÑо напеÑаÑаеÑ
frequency of ' ' is 2
frequency of 't' is 2
frequency of 'l' is 2
frequency of 'B' is 1
frequency of 'c' is 1
frequency of 'e' is 1
frequency of 'h' is 1
frequency of 'i' is 1
frequency of 'a' is 1
Ðак и в опеÑаÑоÑе поиÑка C<m//>, опеÑаÑÐ¾Ñ C<s///> Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ Ð´ÑÑгие ÑазделиÑели,
ÐапÑимеÑ, C<s!!!> и C<s{}{}> и даже C<s{}//>. ÐÑли иÑполÑзÑÑÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÑнÑе кавÑÑки
C<s'''>, Ñогда ÑегекÑп regexp и замена
ÑаÑÑмаÑÑиваÑÑÑÑ ÐºÐ°Ðº ÑÑÑоки в одиноÑнÑÑ
кавÑÑкаÑ
и Ñогда не пÑоиÑÑ
одиÑ
подÑÑановки пеÑеменнÑÑ
. C<s///> в ÑпиÑоÑном конÑекÑÑе
возвÑаÑÐ°ÐµÑ Ñо же Ñамое, как и в ÑкалÑÑном конÑекÑÑе, Ñ.е. ÑиÑло найденнÑÑ
ÑлеменÑов.
=head3 ФÑнкÑÐ¸Ñ split
ФÑнкÑÐ¸Ñ C<split()> ÑвлÑеÑÑÑ ÐµÑе одним меÑÑом, где иÑполÑзÑеÑÑÑ ÑегекÑп.
C<split /ÑегекÑп/, ÑÑÑока, limit> ÑазделÑÐµÑ C<ÑÑÑокÑ> опеÑанд в
ÑпиÑок подÑÑÑок и возвÑаÑÐ°ÐµÑ ÑÑÐ¾Ñ ÑпиÑок. РегекÑп должен бÑÑÑ Ñаким
, ÑÑÐ¾Ð±Ñ Ð½Ð°Ñ
одиÑÑ Ð»ÑбÑе ÑазделиÑели Ð´Ð»Ñ Ð¶ÐµÐ»Ð°ÐµÐ¼ÑÑ
подÑÑÑок.
C<limit>, еÑли он пÑиÑÑÑÑÑвÑеÑ, накладÑÐ²Ð°ÐµÑ Ð¾Ð³ÑаниÑение на Ñаздел не более Ñем C<limit>
ÑÑÑок. ÐапÑÐ¸Ð¼ÐµÑ ÑÑÐ¾Ð±Ñ ÑазделиÑÑ ÑÑÑÐ¾ÐºÑ Ð½Ð° Ñлова, иÑполÑзÑйÑе
$x = "Calvin and Hobbes";
@words = split /\s+/, $x; # $word[0] = 'Calvin'
# $word[1] = 'and'
# $word[2] = 'Hobbes'
ÐÑли иÑполÑзÑеÑÑÑ Ð¿ÑÑÑой ÑегекÑп C<//>, Ñо он вÑегда бÑÐ´ÐµÑ Ð½Ð°Ñ
одиÑÑÑÑ Ð¸ ÑÐ°Ð·Ð´ÐµÐ»Ð¸Ñ ÑÑÑокÑ
на оÑделÑнÑе ÑимволÑ. ÐÑли ÑегекÑп Ð¸Ð¼ÐµÐµÑ Ð³ÑÑппиÑовки,
Ñо ÑезÑлÑÑиÑÑÑÑий ÑпиÑок ÑодеÑÐ¶Ð¸Ñ ÑовпавÑие подÑÑÑоки из
гÑÑппиÑовок. РпÑимеÑÑ
$x = "/usr/bin/perl";
@dirs = split m!/!, $x; # $dirs[0] = ''
# $dirs[1] = 'usr'
# $dirs[2] = 'bin'
# $dirs[3] = 'perl'
@parts = split m!(/)!, $x; # $parts[0] = ''
# $parts[1] = '/'
# $parts[2] = 'usr'
# $parts[3] = '/'
# $parts[4] = 'bin'
# $parts[5] = '/'
# $parts[6] = 'perl'
Так как пеÑвÑй Ñимвол $x ÑегекÑп наÑ
одиÑ, C<split> пÑиÑоединÑеÑ
пÑÑÑой наÑалÑнÑй ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ðº ÑпиÑкÑ.
ÐÑли Ð²Ñ Ð´Ð¾ÑиÑали Ñак далеко, ÐоздÑавлÑем! ТепеÑÑ Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð²Ñе оÑновнÑе
инÑÑÑÑменÑÑ, необÑ
одимÑе Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑегÑлÑÑнÑÑ
вÑÑажений Ð´Ð»Ñ ÑеÑениÑ
ÑиÑокого кÑÑга пÑоблем обÑабоÑки ÑекÑÑа.
ÐÑли ÑÑо Ð²Ð°Ñ Ð¿ÐµÑвÑй Ñаз ÑеÑез ÑÑебник,
Ñо поÑÐµÐ¼Ñ Ð±Ñ Ð½Ðµ оÑÑановиÑÑÑ Ð¸ поигÑаÑÑ Ñ ÑегÑлÑÑнÑми вÑÑажениÑми какое-Ñо вÑемÑ...
S<ЧаÑÑÑ 2> каÑаеÑÑÑ Ð±Ð¾Ð»ÐµÐµ ÑзоÑеÑиÑеÑкиÑ
аÑпекÑов ÑегÑлÑÑнÑÑ
вÑÑажений и ÑеÑ
конÑепÑий, коÑоÑÑе, безÑÑловно, не нÑÐ¶Ð½Ñ Ð² Ñамом наÑале
=head1 ЧаÑÑÑ 2: ÐлекÑÑоинÑÑÑÑменÑÑ (Power Tools)
ÐÑлиÑно, Ð²Ñ Ð·Ð½Ð°ÐµÑе оÑÐ½Ð¾Ð²Ñ ÑегÑлÑÑнÑÑ
вÑÑажений и Ñ
оÑиÑе ÑзнаÑÑ Ð±Ð¾Ð»ÑÑе. ÐÑли
поиÑк ÑегÑлÑÑнÑми вÑÑажениÑми ÑвлÑеÑÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¾Ð¼ пÑогÑлки в леÑÑ, Ñогда
инÑÑÑÑменÑÑ, о коÑоÑÑÑ
говоÑилоÑÑ Ð² пеÑвой ÑаÑÑи, аналогиÑÐ½Ñ ÑопогÑаÑиÑеÑким каÑÑам и
компаÑÑ, ÑÑо оÑновнÑе инÑÑÑÑменÑÑ, коÑоÑÑе Ð¼Ñ Ð¸ÑполÑзÑем вÑе вÑемÑ. ÐолÑÑинÑÑво инÑÑÑÑменÑов в ÑаÑÑи 2
аналогиÑÐ½Ñ Ð¾Ð³Ð½ÐµÐ½Ð½Ñм пиÑÑолеÑам и ÑпÑÑниковÑм ÑелеÑонам. Ðни не иÑполÑзÑÑÑÑÑ
ÑлиÑком ÑаÑÑо в поÑ
оде, но когда Ð¼Ñ Ð·Ð°ÑÑÑÑли, они могÑÑ Ð±ÑÑÑ Ð±ÐµÑÑеннÑми.
Ðиже пÑиводÑÑÑÑ Ð±Ð¾Ð»ÐµÐµ пÑодвинÑÑÑе,но менÑÑе иÑполÑзÑÑÑиеÑÑ Ð¸ даже иногда ÑзоÑеÑиÑеÑкие
возможноÑÑи ÑегÑлÑÑнÑÑ
вÑÑажений Perl. Ð ÑаÑÑи 2 Ð¼Ñ Ð¿Ñедполагаем, ÑÑо вÑ
комÑоÑÑно ÑÐµÐ±Ñ ÑÑвÑÑвÑеÑе Ñ Ð¾Ñновами и ÑеÑили ÑоÑÑедоÑоÑиÑÑ Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ на пÑодвинÑÑÑÑ
ÑÑнкÑииÑÑ
.
=head2 ÐодÑобнее о ÑимволаÑ
, ÑÑÑок и о ÑимволÑнÑÑ
клаÑÑаÑ
СÑÑеÑÑвÑÐµÑ ÑÑд ÑÑкейп поÑледоваÑелÑноÑÑей и ÑимволÑнÑÑ
клаÑÑов, коÑоÑÑе мÑ
пока еÑе не оÑ
ваÑили.
ÐÑÑÑ Ð½ÐµÑколÑко escape-поÑледоваÑелÑноÑÑей, коÑоÑÑе пÑеобÑазÑÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¸Ð»Ð¸ ÑÑÑоки
в веÑÑ
ний и нижний ÑегиÑÑÑ Ð¸ они Ñакже доÑÑÑÐ¿Ð½Ñ Ð²Ð½ÑÑÑи Ñаблонов.
C<\l> и C<\u> пÑеобÑазÑÑÑ ÑледÑÑÑий Ñимвол в нижний или
веÑÑ
ний ÑегиÑÑÑ, ÑооÑвеÑÑÑвенно:
$x = "perl";
$string =~ /\u$x/; # Ð½Ð°Ð¹Ð´ÐµÑ 'Perl' в $string
$x = "M(rs?|s)\\."; # внимание двойной бекÑлеÑ
$string =~ /\l$x/; # Ð½Ð°Ð¹Ð´ÐµÑ 'mr.', 'mrs.', и 'ms.',
C<\L> или C<\U> ÑказÑваÑÑ Ð½Ð° пÑеобÑазование ÑегиÑÑÑа, пока не вÑÑÑеÑиÑÑÑ
завеÑÑаÑÑее C<\E> или бÑоÑаÑÑÑÑ Ð´ÑÑгие C<\U> или C<\L>:
$x = "This word is in lower case:\L SHOUT\E";
$x =~ /shout/; # найдеÑ
$x = "I STILL KEYPUNCH CARDS FOR MY 360"
$x =~ /\Ukeypunch/; # Ð½Ð°Ð¹Ð´ÐµÑ punch card string
ÐÑли Ð½ÐµÑ C<\E>, ÑегиÑÑÑ Ð¼ÐµÐ½ÑеÑÑÑ Ð´Ð¾ конÑа ÑÑÑоки.
РегекÑп C<\L\u$word> или C<\u\L$word> конвеÑÑиÑÑÐµÑ Ð¿ÐµÑвÑй Ñимвол
Ñ C<$word> в веÑÑ
ний ÑегиÑÑÑ Ð¸ оÑÑавÑиеÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð² нижний ÑегиÑÑÑ.
УпÑавлÑÑÑие ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð·Ð°ÑÑÐºÐµÐ¹Ð¿Ð»ÐµÐ½Ñ Ð¿Ñи помоÑи
C<\c>, Ñо еÑÑÑ Ñимвол control-Z бÑÐ´ÐµÑ Ð½Ð°Ð¹Ð´ÐµÐ½ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ C<\cZ>.
( run in 0.718 second using v1.01-cache-2.11-cpan-71847e10f99 )