http://www.perlmonks.org?node_id=1001663


in reply to Find Prefix if regex didn't match

Hello demoralizer and welcome to PerlMonks. May I ask you to post some (working) code here? Just put what you already came up with, even if it is slow, at least we will get a better idea of the context, then we can figure a way to optimize it. Thanks!

There are no stupid questions, but there are a lot of inquisitive idiots.

Replies are listed 'Best First'.
Re^2: Find Prefix if regex didn't match
by demoralizer (Beadle) on Oct 31, 2012 at 15:01 UTC
    Hi greengaroo,

    show working code will be little bit hard because I'm listening to sockets... but here is sth. that should at least show what I'm trying to do:
    # $term is the socket # $text contains all received and unscanned text # $scanned contains all scanned text my $rec; my $time = gettimeofday(); while(1) { # sth. to read? if (read($term, $rec, 0xFFFF)) { # collect what have been read $text .= $rec; # expression found? if ($text =~ s/(.*)($expect)//s) { $scanned .= $1; $scanned .= "MATCH"; $scanned .= $2; return 0; } # shorten string for speed up elsif (length($text) >= 20) { $scanned .= "CUTTED"; $scanned .= substr($text, 0, length($text) - 20 + 1); $text = substr($text, length($text) - 20 + 1); } } # timeout? if (gettimeofday() - $time > $timeout) { $scanned .= "TIMEOUT"; return 1; } }
    It seems that the "elsif (length($text) >= 20)" makes things faster but doesn't do exactly what I want because in this way I can lose possible matchings :(