On 27/01/2012 10:14, Owen wrote:
In the program below, I think I end up with an array of array
references.

But I can not get back the @rest from @desc where it is stored.

Is it possible that @rest is just over written? Might have to think
about doing something else. I can't use hashes as data  elements are
sometimes duplicated.

Any clues as to the syntax to get back the data would be appreciated

TIA

Owen

============================================================
#!/usr/bin/perl

use strict;
use warnings;

my @lat;
my @lon;
my @desc;
my $rest_ref;

while (<DATA>) {
     my ( $lat, $lon, @rest ) = split;
     print "@rest";
     $rest_ref = \@rest;
     push( @desc, $rest_ref );

}



__DATA__
36.97972        148.88564       House post
36.97853        148.87706       Second fence post
36.97847        148.88756       Curve in road
36.98050        148.88569       Delegate side of gate
36.97694        148.88844       Culvert
36.97956        148.88550       Power Pole
36.98150        148.88344       Dam
36.97922        148.88036       Dam wall
============================================================

Hi Owen

Well done on a nicely layed-out program.

You can access the anonymous arrays from @desc using

  foreach my $rest (@desc) {
    print "@$rest\n";
  }

But there is no need to split the thrid field in the first place. You
have two options: first to split on more than a single space with

  my ( $lat, $lon, $rest ) = split /\s{2,}/;

and secondly to limit the number of fields that split() divides the
record into

  my ( $lat, $lon, $rest ) = split ' ', $_, 3;

Be aware that both of these techniques will leave the newline on the end
of the last field, so a call to chomp() will be necessary as the first
line of the while loop.

HTH,

Rob



--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to