ocehb: (Default)

sub ipv6squeeze ($) { $_[0] =~ s#(^|:)0+#$1#gr =~ s#:::+#::#gr }

пример )
ocehb: (Default)
До сих пор не задумывался на эту тему, но работает. Пример:
Задание: Удалить все знаки «+», за которыми следует цифра.

# perl -le '$ARGV[0] =~ s#\+(?=\d)##g && print $ARGV[0]' "+test + +12 +13 ++"
+test + 12 13 ++
#

ocehb: (Default)
используем конструкцию (??{ code }); perldoc perlre

под кат )

резюме: на больших массивах имеет смысл использовать поиск через хеш.

update: при модификаторе /о регулярное выражение выигрывает у хеша, но до определенного размера.

Size: 16384
Benchmark: timing 1000000 iterations of A, B...
         A:  5 wallclock secs ( 4.58 usr + -0.01 sys =  4.57 CPU) @ 218818.38/s (n=1000000)
         B:  0 wallclock secs ( 0.90 usr +  0.02 sys =  0.92 CPU) @ 1086956.52/s (n=1000000)
Size: 32768
Benchmark: timing 1000000 iterations of A, B...
         A:  5 wallclock secs ( 4.55 usr +  0.00 sys =  4.55 CPU) @ 219780.22/s (n=1000000)
         B: 239 wallclock secs (237.26 usr +  0.37 sys = 237.63 CPU) @ 4208.22/s (n=1000000)
ocehb: (Default)

my @head = split "(?ms)\r?\n(?!\\s)",do { local $/ = ""; <STDIN> };


в @head — строки из заголовка письма, со всеми переносами.
тело письма дальше в stdin, можно читать и построчно.
ocehb: (Default)
синтаксис: (?<name>выражение), обратная ссылка \k<name>, ссылка в коде $+{name}.

Пример разбора access_log )
ocehb: (Default)
# perl -MEmail::Valid -MGraphViz::Regex -e \
'GraphViz::Regex->new ($Email::Valid::RFC822PAT)->as_png ($ARGV[0]);' /tmp/rfc822pat.png

(большое, ~1M)

Profile

ocehb: (Default)
ocehb

January 2021

S M T W T F S
     12
345 6789
10111213141516
17181920212223
24252627282930
31      

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 8th, 2025 03:20 am
Powered by Dreamwidth Studios