in reply to Speed of Split
This may not be representative, but a simple test shows that regexp could be much much faster here:
use Benchmark (); our @data; my $line = '1.000000 ' . ' 100.273 121.54 98.169 121.58' . ' 100.273 121.54 98.169 121.58' . ' 100.273 121.54 98.169 121.58' . ' 100.273 121.54 98.169 121.58'; Benchmark::cmpthese(0, { split => sub { @data = split(/\s+/, $line) }, fixed_length => sub { @data = $line =~ /^.{8} {6}(.{10})(.{10})(.{1 +0})(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})(.{10})$/ +}, var_length => sub { @data = $line =~ /^.{8}\s+(\S+)\s+(\S+)\s+(\S ++)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+ +(\S+)$/ }, }); __END__ Rate split var_length fixed_length split 63116/s -- -30% -87% var_length 90310/s 43% -- -81% fixed_length 482454/s 664% 434% --
Of course, fixed_length would assume that you do your own joining, since join would not preserve field widths.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Speed of Split
by bart (Canon) on Nov 18, 2004 at 14:32 UTC | |
Re^2: Speed of Split
by Chady (Priest) on Nov 18, 2004 at 10:04 UTC |