In addition to the other good advice, you might consider anchoring your RE and using possessive quantifiers.

use strict; use warnings; use Benchmark qw(:all); my $data = do { local $/; <DATA> }; sub old { for (1..100) { if($data =~ m/(.+\n.*(tulip|elephant).+\n.+)/gim) { # print "matched:\n$1\n\n"; } } } sub new { for (1..100) { if($data =~ m/^(.++\n.*(tulip|elephant).++\n.+)/gim) { # print "matched:\n$1\n\n"; } } } cmpthese(10, { old => \&old, new => \&new, } ); __DATA__ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur con +sectetur tincidunt enim vitae elementum. Donec at nulla et est pretium eleifend +. Sed lorem dolor, viverra nec posuere vitae, ultrices in lorem. In porta ve +nenatis sapien vulputate blandit. Suspendisse a velit augue, ut blandit lorem. + Vivamus sodales velit a felis tempus consectetur. Pellentesque fringilla variu +s ligula, at volutpat justo mattis ut. Donec elit velit, pulvinar quis adipiscin +g dignissim, sagittis vel sem. Aliquam accumsan consequat scelerisque. M +orbi ac augue metus. Duis tempus venenatis dui eu pharetra. Vivamus vestibulum facilisis orci sit amet sollicitudin. Mauris justo eros, adipiscing el +ementum sollicitudin at, auctor in nunc. Nullam non erat mauris. Proin est orc +i, iaculis sed pharetra ac, tempor sed erat. Etiam tellus elit, mattis id + faucibus quis, semper in justo. Cras sit amet dignissim enim. In varius tincidunt massa ut porttitor. Cum sociis natoque penatibus e +t magnis dis parturient montes, nascetur ridiculus mus. In ullamcorper est ut l +orem malesuada in convallis purus semper. Morbi scelerisque volutpat magna, + eget suscipit justo porttitor non. Proin condimentum bibendum justo at semp +er. Phasellus rhoncus, dui et convallis pretium, urna urna ultrices turpis +, ac tristique odio nisl id felis. Vestibulum laoreet justo eu augue facili +sis at mollis libero luctus. Sed laoreet pulvinar semper. Vivamus pharetra, d +ui id gravida placerat, odio arcu congue elit, sed pellentesque odio erat a +nisi. Fusce ut ipsum nec elit semper vehicula. Nam porttitor commodo sem, at + pretium erat semper ac. Aenean ut varius tortor. Sed quis tortor sit amet sem +vulputate posuere. Proin eu lorem velit. Morbi eget sapien et massa aliquet hendrerit sit + amet in mi. Phasellus posuere, purus ut adipiscing dapibus, elit neque element +um mauris, ut vulputate metus nunc euismod nulla. Sed eleifend leo a nunc porttitor ultrices. Phasellus arcu lorem, sagittis eu tincidunt non, l +obortis vitae felis. Donec quis sem tellus. Sed id euismod tellus. Pellentesqu +e quis ipsum nulla, non cursus orci. Curabitur id adipiscing leo. Duis eget s +em at est iaculis pulvinar. Donec nec nibh nunc. Maecenas tincidunt dictum metus +. Proin luctus nisl nec ante porttitor vel condimentum lacus rutrum. Maecenas et lacus nisi. Vivamus justo nunc, hendrerit vel congue sit a +met, vulputate eu nisi. Nunc lacinia, sapien vel cursus euismod, nisi turpi +s scelerisque tellus, quis porta enim lacus quis velit. Nulla justo null +a, malesuada viverra cursus in, porttitor ut mauris. Curabitur mattis ven +enatis dolor, in vehicula dolor pretium quis. Cras volutpat dignissim metus, +eu malesuada felis accumsan eu. Integer pretium, turpis quis viverra plac +erat, sem magna vulputate risus, eget congue magna nisi eu turpis. Donec consequ +at semper dolor hendrerit sollicitudin. Maecenas laoreet felis vel mauris accums +an ac ultricies lorem fringilla. Aliquam semper ultrices convallis. Nam cong +ue, ipsum sed lobortis dapibus, ante justo ultricies purus, sit amet malesuada d +iam sem quis lacus. Vivamus ultrices, purus ac malesuada lobortis, odio est mo +llis massa, in porttitor velit nunc sit amet lorem. Suspendisse pellentesqu +e dignissim egestas. Etiam a convallis est. Cras tincidunt volutpat nibh +, at porttitor dolor convallis vitae. Suspendisse felis orci, sagittis a ph +aretra nec, elementum sit amet orci. Nunc porta viverra nibh sed tincidunt. Nullam risus dui, tincidunt quis viverra at, auctor vitae diam. Maecen +as nisl metus, porta ut interdum nec, faucibus nec tellus. Nunc aliquam, mauri +s ac luctus pharetra, elit orci aliquam magna, sit amet consequat velit nib +h et mi. Aenean at lectus at dui ultrices laoreet. Etiam euismod molestie vesti +bulum. Pellentesque sit amet lectus nec nibh mollis dapibus. Maecenas bibendu +m augue ut leo euismod convallis. Nulla dapibus posuere felis, non elementum e +rat posuere ac. Aenean suscipit, felis non sagittis molestie, felis massa +luctus est, id facilisis felis dui id neque. Cras semper dignissim elit, at scelerisque leo porttitor eget. Nullam in ipsum in neque ultrices rhon +cus. Donec ac justo et enim rutrum adipiscing a vitae sapien. Nulla non dui + mi. Vivamus aliquam varius purus non ornare. Curabitur placerat nisi a nul +la euismod volutpat. Maecenas ac sapien ac magna posuere suscipit. Quisque nec magna non mi + interdum tempor. Quisque vestibulum mi in ligula adipiscing tincidunt. Fusce ru +trum, odio a egestas blandit, lorem ipsum venenatis quam, et pellentesque li +gula elit sit amet nisi. Cras nec arcu nunc. Pellentesque vestibulum mattis diam +, id porta arcu commodo et. Pellentesque habitant morbi tristique senectus +et netus et malesuada fames ac turpis egestas. Mauris faucibus porta lacus, ege +t interdum libero aliquet nec. Nulla facilisi. Ut leo dui, semper in lac +inia at, aliquam at lacus. Ut ipsum dui, tulip gravida et condimentum ac, congu +e non lacus. Donec eu lectus et nunc varius cursus. Duis pharetra lacinia v +elit, eget volutpat est mollis quis. Nam aliquam congue pellentesque. Suspen +disse tincidunt dapibus metus, et tempus elit aliquet quis. Praesent ut veli +t at arcu ultrices malesuada sed sed nisl. Integer elementum nisi a felis bibend +um id ultricies tortor consectetur. Duis mi urna, eleifend sed porta quis, t +ristique nec dolor. Morbi leo augue, fermentum et fringilla nec, volutpat vitae + diam. Curabitur augue felis, molestie sit amet malesuada id, pharetra eget d +iam. Vivamus est enim, rutrum ut sodales in, luctus sit amet libero. Curabi +tur vulputate eros a enim tristique eget fringilla sem pellentesque. Duis +eget ipsum nec erat aliquam porta. Proin vulputate risus sagittis massa ali +quam non interdum dui tincidunt. Duis sit amet sagittis urna. Nullam sem nulla, tristique non lacinia quis, vestibulum nec metus. Sed nibh ligula, vol +utpat vehicula euismod vitae, scelerisque eu quam. Donec elementum mollis la +cus ut molestie. Praesent tempor ante et metus ullamcorper sit amet suscipit +nunc elementum. Aliquam sodales sapien sed dui ultricies consectetur. Proin + sed nisl ut enim viverra consequat. Nulla vel commodo magna. Donec venenatis po +suere lacus, sed malesuada erat porttitor in. Nunc lacinia ultrices lectus in consectetur. Nullam aliquam sapien non + purus tincidunt eleifend. Nullam nec lectus ut orci vulputate mollis. In eu +purus magna, vitae condimentum mauris. Praesent mattis diam non erat mollis +viverra. Vivamus faucibus libero sit amet arcu vestibulum vel sagittis ligula e +gestas. Donec tempus suscipit leo ac imperdiet. Aliquam auctor, ligula sit ame +t volutpat imperdiet, mi justo imperdiet augue, eu placerat sapien nisi +at felis. Curabitur nec metus et mi molestie dapibus. Ut tellus leo, hendrerit s +it amet tincidunt vel, scelerisque in arcu. Nullam quis interdum dui. Phasellu +s convallis tincidunt ligula in commodo. Nam pharetra felis sed ligula c +onsequat eu venenatis urna vestibulum. Nam sit amet sapien at neque euismod tem +pus. Mauris imperdiet erat eget orci ultricies mattis. Curabitur aliquam in +terdum nulla vel condimentum. Aliquam vestibulum, mauris sed placerat vehicul +a, justo orci molestie nulla, lobortis scelerisque nunc ligula non nunc. Vestib +ulum condimentum sagittis massa, sit amet porta sem aliquet vitae. Vestibul +um ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae +; In egestas ligula eget tortor mattis sit amet elementum nibh tincidunt +. Phasellus id ipsum nec diam dapibus ultricies et vitae tellus. Suspend +isse vitae justo lectus, quis imperdiet erat. Duis pretium nibh eget turpis imperdiet tincidunt. Praesent id enim aliquam felis auctor mollis. Ut +aliquet euismod facilisis. Pellentesque habitant morbi tristique senectus et n +etus et malesuada fames ac turpis egestas. Phasellus euismod, nibh non lacinia consectetur, magna purus ultricies elit, quis faucibus nunc magna conv +allis ipsum. Curabitur risus urna, vestibulum quis consectetur sit amet, orn +are in risus. Duis euismod nulla ac ante interdum viverra. Nam odio eros, sodales non egestas id, convallis et magna. Class apten +t taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos +. Nulla facilisi. Donec viverra dignissim justo, quis congue magna aliquam vit +ae. Proin pellentesque ultricies mi, ut aliquam nulla pulvinar nec. In lacinia, +augue at varius iaculis, ligula metus placerat ipsum, et dictum diam erat eu er +os. Aenean tincidunt sem quis augue dictum accumsan. Cras porttitor suscip +it urna malesuada dignissim. Aliquam mattis mauris id diam dignissim commodo. +Sed libero est, accumsan eu interdum ac, pharetra vitae sem. Curabitur vel + nisi vel mi ultrices pulvinar quis id sem. Cras euismod nulla nunc, non sollici +tudin augue. Ut sagittis, nunc bibendum aliquam adipiscing, leo eros posuere + felis, non placerat magna neque nec libero. Pellentesque habitant morbi trist +ique senectus et netus et malesuada fames ac turpis egestas. Morbi quis jus +to turpis. Integer sollicitudin porttitor mi, id euismod leo elementum no +n. Vestibulum quis diam odio, non aliquam sem. Integer lobortis cursus co +nsequat. Donec consequat aliquet bibendum. Maecenas ac sapien ac magna posuere suscipit. Quisque nec magna non mi + interdum tempor. Quisque vestibulum mi in ligula adipiscing tincidunt. Fusce ru +trum, odio a egestas blandit, lorem ipsum venenatis quam, et pellentesque li +gula elit sit amet nisi. Cras nec arcu nunc. Pellentesque vestibulum mattis diam +, id porta arcu commodo et. Pellentesque habitant morbi tristique senectus +et netus et malesuada fames ac turpis egestas. Mauris faucibus porta lacus, ege +t interdum libero aliquet nec. Nulla facilisi. Ut leo dui, semper in lac +inia at, aliquam at lacus. Ut ipsum dui, tulip gravida et condimentum ac, congu +e non lacus. Donec eu lectus et nunc varius cursus. Duis pharetra lacinia v +elit, eget volutpat est mollis quis. Nam aliquam congue pellentesque. Suspen +disse tincidunt dapibus metus, et tempus elit aliquet quis. Praesent ut veli +t at arcu ultrices malesuada sed sed nisl. Integer elementum nisi a felis bibend +um id ultricies tortor consectetur. Duis mi urna, eleifend sed porta quis, t +ristique nec dolor. Morbi leo augue, fermentum et fringilla nec, volutpat vitae + diam. Curabitur augue felis, molestie sit amet malesuada id, pharetra eget d +iam.
s/iter old new old 1.60 -- -99% new 2.00e-02 7895% --

I haven't tested carefully, but in simple cases the modified expression appears to give the same results, performance aside.


In reply to Re: FAST way to pull multiple lines around a keyword by ig
in thread FAST way to pull multiple lines around a keyword by rizzy

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.