#!/usr/bin/perl use strict; use warnings; # make a 4MB file, 100000 lines == 40bytes/line print("creating file...\n"); create_file("testfile.txt", 40, 100000); # find a line in the file print("searching file...\n"); find_line("testfile.txt", "000099000"); print("searching file...\n"); find_line("testfile.txt", "000000100"); print("searching file...\n"); find_line("testfile.txt", "000099999"); sub create_file { my $filename = shift; my $bytes = shift; my $lines = shift; my @chars = map{chr($_)} (32..126); open FILE, ">$filename" or die "can't open $filename: $!"; for (my $i = 0; $i < $lines; $i++) { # make id, 10 bytes my $line = sprintf("%09d ", $i); # make rest of line for (my $j = 0; $j < $bytes-10; $j++) { $line .= $chars[rand(@chars)]; } print FILE "$line\n"; } close FILE or die "can't close $filename: $!"; } sub find_line { my $filename = shift; my $id = shift; my $start = time; open FILE, "<$filename" or die "can't open $filename: $!"; while (my $line = ) { if ($line =~ m/^$id/) { print "FOUND! $line"; last; } } my $end = time; my $time_taken = $end - $start; if ($time_taken < 10) { print "Finished in $time_taken seconds. ", "That's less than 10 seconds -- mission accomplished!\n"; } } __END__ Output: creating file... searching file... FOUND! 000099000 H_eHMl}XjMhkQysu1h?ON8y1d9loP= Finished in 1 seconds. That's less than 10 seconds -- mission accomplished! searching file... FOUND! 000000100 w6M:YgK1{*AmG;Lh5Cp,unCo\[aJQ` Finished in 0 seconds. That's less than 10 seconds -- mission accomplished! searching file... FOUND! 000099999 u#656~vOL^HMy{V_[D]@-2e}tH}Auo Finished in 0 seconds. That's less than 10 seconds -- mission accomplished!