use strict; use Benchmark; my $testline = ''; my $xmlregex = qr/(?:\s+(\w+)=\"(.*?)\")|(?:^\s*<(\w+))|(?:>\s*$)/; my $xmlregex1 = qr/^\s*<([^\s]+)(.*)>\s*$/; my $xmlregex2 = qr/\s+(\w+)="([^"]+)"/; my @lines = ($testline) x 5000; my @example = (); sub useregex2 { my @items = (); foreach my $line (@lines) { if ($line =~ /$xmlregex1/o) { my ($element,$attribs) = ($1,$2); @items = grep length, split(/$xmlregex2/, $attribs); } else { print "useregex2: malmformed XML in $line\n"; exit; } } } sub usesplit { foreach my $line (@lines) { my @items = split(/\s+/,$line); } } timethese (500, { 'useregex2' => \&useregex2, # 'useregex' => \&useregex, 'usesplit' => \&usesplit, });