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/