http://qs321.pair.com?node_id=723275


in reply to Re^2: how to speed lookups?
in thread how to speed lookups?

While the OP mentions fetching the first field, you'll notice the OP used $fields[1], not $fields[0]. I believe that means he's using split to parse a single-quoted string. That's not what I'd call an appropriate use of split.

So in this case, the optimal split would be

my $searchfield = ( split /'/, $line, 3 )[1];

Using split requires matching twice, creating three variables and copying the entire string.

my ($searchfield) = $line =~ /^'([^']*)/;

Using the match operator requires matching once, creating one variable and copying only the field. Actual performance aside, it's definitely a cleaner process.

Finally, split will be very bad at handling escaping when the OP discovers the need for it.

maybe ([...]) even simply if a specific number of items are assigned

An operand doesn't know what the caller will do with the returned list, so your "maybe" doesn't apply. If it behaves as you think, the following snippet will result in $c being assigned 2 when it should be assigned 3.

$c = ($f1,$f2) = (4,5,6);