#!/usr/bin/perl -w

use strict;
use Benchmark;

undef $/;
my $src = <>;

sub original {
    my $work = $src;
    while($work =~ /\t/){
	$work =~ s/\t/' ' x (8 - length($`) % 8)/e;
    }
}

sub with_length {
    my $work = $src;
    1 while $work =~ s/\t/' ' x (8 - length($`) % 8)/e;
}

sub with_sprintf {
    my $work = $src;
    $work =~ s/((?:[^\t]{8})*)([^\t]{0,7})\t/
	sprintf("%s%-8s", $1, $2)/eg;
}

print "*** first, bechmark 'length' and 'sprintf' function only. ***\n";
timethese(500, {
             'length' => sub { for ( 1..1000 ) { length("nyo.") } },
             'sprintf' => sub { for ( 1..1000 ) { sprintf("%-8s", "nyo.") } }
	       });


print "*** next! main benchmark. ***\n";
timethese(500, {
             'original code' => \&original,
             'code with length(small fix)' => \&with_length,
             'code with sprintf' => \&with_sprintf,
	       });
