Starlink::AST - Interface to the Starlink AST library


  use Starlink::AST;

  my $zmap = new Starlink::AST::ZoomMap( 2, 5, "" );
  $zmap->Set( Zoom => 5 );

  my ($xout, $yout ) = $zmap->Tran2( [1,2], [4,6], 1);

  my $fchan = new Starlink::AST::FitsChan();
  for (<DATA>) {
   $fchan->PutFits( $_, 0);
  $fchan->Clear( "Card" );

  $wcs = $fchan->Read();

  tie %hash, "Starlink::AST::KeyMap";
  $hash{KEYWORD} = $value;

  $km = Starlink::AST::KeyMap->new( "" );
  tie %hash, $km;


Starlink::AST provides a perl wrapper to the Starlink AST library. The Starlink AST library provides facilities for transforming coordinates from one system to another in an object oriented manner. Multiple coordinate frames can be associated with a data set and it is also possible to generate automatic mappings between frames.

Coordinate frame objects can be imported from FITS headers and from NDF files.


In general the method names used in the Perl interface match the function names in the C library with the "ast" prefix dropped. Functions that require C arrays, should take references to Perl arrays. AST functions that return values/arrays now return these values/arrays onto the perl stack rather than the argument stack.

The constructor functions are now replaced with new methods in the relevant class. e.g rather than calling astZoomMap(), the Perl interface uses the new method in the Starlink::AST::ZoomMap namespace.


The following constructors are available. Currently, these constructors match the C constructors fairly closely.

This is one area which may change when the class comes out of alpha release. The main problem with the constructors is the options string (a standard AST option string with comma-separated keyword value pairs). It would make more sense to replace these constructors with hash constructors that take the mandatory arguments in the correct order and hash arguments for the options.


Instantiate an astFrame() object.

  $frame = new Starlink::AST::Frame( $naxes, $options );
  $frameSet = new Starlink::AST::FrameSet( $frame, $options );
  $cmpFrame = new Starlink::AST::CmpFrame( $frame1, $frame2, $options );
  $cmpMap = new Starlink::AST::CmpMap( $map1, $map2, $series, $options );

The astChannel contructor takes a hash argument. There are no mandatory keys to the hash. Sink and Source callbacks for the channel can be supplied using the keys "sink" and "source". All other keys are expected to correspond to attributes of the channel object (e.g. Comment, Full and Skip for astChannel).

  $chann = new Starlink::AST::Channel( %options );

  $chann = new Starlink::AST::Channel( sink => sub { print "$_[0]\n"; } );

The "sink" callback expects to be given a single argument as a string. The "source" callback takes no arguments and should return a single string.


Same calling signature as Starlink::AST::Channel.


Same calling signature as Starlink::AST::Channel. Note that xmlChan is only available for AST v3.1 and newer.


A Starlink::AST::Channel using IVOA STC-S descriptions.


Only available in AST v3.0 and newer.

  $grismMap = new Starlink::AST::GrisMap( $options );

Not Yet Implemented.

 $intraMap = new Starlink::AST::IntraMap( $name, $nin, $nout, $options );

Base class methods

These methods will work on all classes of AST objects.

Mapping methods


FrameSet methods



Rather than using the astOK function provided to the C interface (which is not thread safe) AST errors are converted to Perl exceptions (currently croaks) which can be caught with an eval.


 + Convert AST croaks to true exceptions of class Starlink::AST::Error

 + Tidy up the interfaces to the constructors

 + Properly document the Perl interface

 + Finalise the interface


The AST library can be downloaded from


Tim Jenness <>

Copyright (C) 2004-2012, 2014 Tim Jenness. All Rights Reserved.

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place,Suite 330, Boston, MA 02111-1307, USA