in reply to Searching in binary files

Use a sliding window:

my @lines; $/ = \80; # assume a block size of 80 while (<$file>) { push @lines, $_; my $str = join "", @lines; if ($str =~ /searchword/) { my $loc = tell $file - pos $str; print "Found a match starting after $loc.\n"; }; if (@lines > 2) { shift @lines }; };

Instead of looking for a match in just one "line", you look for a match in the "line" and the "line" after it.

Replies are listed 'Best First'.
Re^2: Searching in binary files
by crenz (Priest) on Dec 14, 2005 at 18:25 UTC

    Danke nach Frankfurt!

    There are a few bugs in your code, though. I changed the if to a while loop and fixed a few other problems:

    while ($str =~ /searchword/g) { my $loc = tell($fh) - length($str) + pos($str); print "Found a match starting after $loc.\n"; }

    Update: That doesn't quite work either... it finds too many occurrences...

      while ($str =~ /$pattern/g) { my $loc = tell($fh) - length($str) + pos($str) - length($patte +rn); print "Found a match starting after $loc.\n"; }