in reply to What is the fastest way to extract data from a delimited string?

... yet another way
use strict; my (@list) = map { /\w+\s+\w+\s+\w+\s+\w+\s+\w+\s+(\w+)\s+.*/} <DATA>; print "@list"; __DATA__ 1 2 3 4 5 6 7 8 james joe jack janet jill joann joeanne bill bob alice joe jack janet jill alice joeanne bill bob james joe jack janet jill susan joeanne bill bob james joe jack janet jill sarah joeanne bill bob james joe jack janet jill ethel joeanne bill bob
Only using map... very brief though :)
  • Comment on Re: What is the fastest way to extract data from a delimited string?
  • Download Code

Replies are listed 'Best First'.
Re: Re: What is the fastest way to extract data from a delimited string?
by dragonchild (Archbishop) on Jan 10, 2003 at 15:49 UTC
    Not very fast or maintenable, though. How about something like:
    sub read_stuff { my ($handle, $delim, $col) = @_; my $prep = '^\s*'; $prep .= "\w+${delim}+" for 1 .. $col - 1; $prep .= "(\w+)(?:${delim}|$)"; my $regex = qr/$prep/; my @list = map { /$regex/o } <$handle>; return @list; } my $handle = IO::File->new(filename => "some_file"); my @list = read_stuff($handle, ' ', 6);
    Remember something - "fast" is a relative term. You might squeeze an additional millisecond from your CPU, but require an extra 8 hours every time you want to make a change to your code. To me, that's not worth it. My 8 hours is worth more than one millisecond of CPU time. To me, "fast" has to do with acceptable CPU progress and lightning-quick maintenance time. YMMV.

    ------
    We are the carpenters and bricklayers of the Information Age.

    Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.