in reply to Re: recursive parsing techniques
in thread recursive parsing techniques

Thank you all for your responses. The answer seems so obvious when I read them. 8 hours sleep doesn't hurt either :)

The $pos thing is throwing me a little bit. If I wanted to parse the vCard file in a while loop instead of slurping the whole thing into memory, how can I obtain the position of the file during the while iteration - and how could I advance to the next line of the file without breaking out of the recurse or the while?

Outside of "while(<FILEHANDLE>)" contructs I think I need a little more practice manipulating files on disk without loading everything into memory.../me goes off to read more...

Thanks again!

Replies are listed 'Best First'.
Re: Re: Re: recursive parsing techniques
by castaway (Parson) on Dec 30, 2003 at 08:45 UTC
    I was thinking to read in the entire file, concatenate into one big string, and work on that.. If you want to do it line by line, and each item is on a line by itself (as it appears to be from your example), then you wont need the position bit, just call the function with the filehandle and the current line instead. Thus you get:
    sub parsevcard { my ($fh, $line) = @_; my $currentvcard = {}; # check that $line is really the beginning of a vcard, else die # loop reading lines from <$fh> and putting them in $currentvcard, + call $currentvcard->{AGENT} = parsevcard($fh, $line) if a BEGIN:VCAR +D is encountered return $currentvcard; # check for end vcard? }
    .. Actual contents left as an exercise for the reader..

    C.