in reply to Re: ideas on how to improve existing code
in thread ideas on how to improve existing code

I'm not sure where you get the "perl parsing method" idea from as my sample code in reply to the OP is a minor refactoring of the OP's code. It uses $csv->parse ($line) to parse individual lines from the file as does the OP's code.

However, despite the OP's proffered guess that the code may be inefficient, the plea in the title of the node is "ideas on how to improve existing code" which I addresses by pointing to maintenance and reliability related good coding practises. People seem to get hung up about "efficiency" issues without any need at all to make the code execute more quickly. Maintenance and reliability are generally much more important. If the OP were not using a module for parsing csv already I'd recommend using a module just from the point of view of saving programmer time and making the code more reliable and maintainable - "efficiency" is generally completely irrelevant!

True laziness is hard work

Replies are listed 'Best First'.
Re^3: ideas on how to improve existing code
by Tux (Canon) on Aug 29, 2011 at 22:58 UTC

    It was nothing personal, but I am on a crusade in trying to prevent people that already use Text::CSV, Text::CSV_XS and/or Text::CSV_PP to use

    while (<$fh>) { my @row = $csv->parse ($_); ...

    which I was referring to with your "perl parsing method" (or any variation thereof) instead of

    while (my $row = $csv->getline ($fh) { ...

    Which is not only faster, but immensely safer. Under the hood both <> and $csv->getline use perl's getline function and both respect the (perlio) layers, but the upper method is not able to detect the difference between an embedded $/ inside quotes or at the end of a line, so it is very open to erroneous behavior. Besides that, CSV's getline is more lenient towards trailing carriage returns and/or newlines (unless you explicitely set the eol attribute.


    Enjoy, Have FUN! H.Merijn