my %line = ( lineNameA => { StationA => [ xxx.xx, yyy.yy, zzz.zz ], StationB => [ xxx.xx, yyy.yy, zzz.zz ], ... }, lineNameB => { ... ); my( $x, $y, $z ) = $line{ $lineName }{ $stationName }; # Or use constant{ X => 0, Y => 1, Z => 2 }; my $y = $line[ $lineNo ][ $staionNo ][ Y ]; #### my @line = ( [ ## $line[ 0 ] [ xxx.xxx, yyy.yyy, zzz.zzz ], ## $line[0][0] (station 0) [ xxx.xxx, yyy.yyy, zzz.zzz ], ## (station 1) [ xxx.xxx, yyy.yyy, zzz.zzz ], ... ], [ ## Line[ 1 ] [ xxx.xxx, yyy.yyy, zzz.zzz ], ## Line[ 1 ][ 0 ] [ xxx.xxx, yyy.yyy, zzz.zzz ], [ xxx.xxx, yyy.yyy, zzz.zzz ], ... ], ... ); my( $x, $y, $z ) = $line[ $lineNo ][ $stationNo ]; # Or use constant{ X => 0, Y => 1, Z => 2 }; my $y = $line[ $lineNo ][ $staionNo ][ Y ];