in reply to Re: Matching next line in text file
in thread Matching next line in text file

I don't know if that's quite what I want.

I'm building a couple of hashes on the fly here. One of them holds station ID as keys and arrays of station coordinates as values. This I've called %stn. When I reach the next SEG-P1 header block, I want to save this %stn hash into another hash that I've called %seg (see code sample in original question).

But I also want to be able to save this when there is no header block between data sets. An example of this is the data sample of Case 2 above.

After all this saving is done (I also need to put the header array @hdr into the %seg hash), I want to empty the station hash (%stn) and the header array so that they can accept the next data set.

Also, I tried the $stn->{$s} syntax, and it didn't work. I got the error that $stn wasn't part of a package (I hadn't declared it lexically -- rather, I had declared it lexically as a hash, not a scalar, variable).

Replies are listed 'Best First'.
Re^3: Matching next line in text file
by pc88mxer (Vicar) on Jul 03, 2008 at 21:51 UTC

    I made $stn a hash ref because this isn't going to work:

    $seg{$lname} = { 'header' => \@hdr, 'stations' => \%stn, };
    You'll find that the header will always point to the same array. The same will be true for stations - all of them will be the same hash.

    However, if you make the stn hash a hash ref, then this will work:

    # time to save stn and headers: $seg{$lname} = { header => [ @hdr ], stations => $stn }; @hdr = () $stn = undef;
    Note the square brackets around @hdr - this will create a new array.