#!/usr/bin/perl
use strict; use warnings;
# fake test data
my @numbers = ((765432, 567890, 232323) x 500, 123456);
my $input = join '', map "this line $numbers[rand @numbers]\n", 1..2000000; print $input =~ tr/\n//, ' lines and ', scalar(() = $input =~ /123456\n/g), " matches\n";
# end of fake stuff
my $counter = my $counter2 = 0;
my $bufsize = 1024 * 10000;
my $bufcnt = 0;
open my $fh, '<', \$input or die "$! on open"; # needs adjusting while( read $fh, $_, $bufsize ) {
$bufcnt++;
$_ .= <$fh> // ''; # finish partial line
$counter += tr/\n//;
$counter2 += () = /123456\n/g;
}
print "$counter lines and $counter2 matches in $bufcnt blocks of $bufsize in @{[time - $start]}\n";
IyEvdXNyL2Jpbi9wZXJsCnVzZSBzdHJpY3Q7IHVzZSB3YXJuaW5nczsKdXNlIFRpbWU6OkhpUmVzIHF3KHRpbWUpOwoKIyBmYWtlIHRlc3QgZGF0YQoKbXkgQG51bWJlcnMgPSAgKCg3NjU0MzIsIDU2Nzg5MCwgMjMyMzIzKSB4IDUwMCwgMTIzNDU2KTsKbXkgJGlucHV0ID0gam9pbiAnJywgbWFwICJ0aGlzIGxpbmUgJG51bWJlcnNbcmFuZCBAbnVtYmVyc11cbiIsIDEuLjIwMDAwMDA7CnByaW50IGxlbmd0aCAkaW5wdXQsICIgaXMgbGVuZ3RoXG4iOwpwcmludCAkaW5wdXQgPX4gdHIvXG4vLywgJyBsaW5lcyBhbmQgJywgc2NhbGFyKCgpID0gJGlucHV0ID1+IC8xMjM0NTZcbi9nKSwgIiBtYXRjaGVzXG4iOwoKIyBlbmQgb2YgZmFrZSBzdHVmZgoKbXkgJHN0YXJ0ID0gdGltZTsKbXkgJGNvdW50ZXIgPSBteSAkY291bnRlcjIgPSAwOwpteSAkYnVmc2l6ZSA9IDEwMjQgKiAxMDAwMDsKbXkgJGJ1ZmNudCA9IDA7Cm9wZW4gbXkgJGZoLCAnPCcsIFwkaW5wdXQgb3IgZGllICIkISBvbiBvcGVuIjsgIyBuZWVkcyBhZGp1c3RpbmcKd2hpbGUoIHJlYWQgJGZoLCAkXywgJGJ1ZnNpemUgKQogIHsKICAkYnVmY250Kys7CiAgJF8gLj0gPCRmaD4gLy8gJyc7ICMgZmluaXNoIHBhcnRpYWwgbGluZQogICRjb3VudGVyICs9IHRyL1xuLy87CiAgJGNvdW50ZXIyICs9ICgpID0gLzEyMzQ1NlxuL2c7CiAgfQpwcmludCAiJGNvdW50ZXIgbGluZXMgYW5kICRjb3VudGVyMiBtYXRjaGVzIGluICRidWZjbnQgYmxvY2tzIG9mICRidWZzaXplIGluIEB7W3RpbWUgLSAkc3RhcnRdfVxuIjs=