3D Scan, Flipping the Scan Direction

#!/usr/bin/perl -w
#
use strict; 
my $status = 1; 
#
# the outer loop motor and its positions
#
my $mot_2d = "mot27"; 
# my @pos_2d = qw( 10 20 30);
my @pos_2d = map {$_ = $_*0.1 + 0.3}  ( 0 .. 2);
#
my $mot_3d = "mot29"; 
my @pos_3d = map {$_ = $_*0.2 - 2.}  ( 0 .. 2);
#
#
#
my $start = -2;
my $stop = -1.9;
my $st =  0.1;  # sample time

my $bl = Spectra::get_motor_unit_backlash( "mot30"); 
Util::log( "mot30, set backlash to 0, was $bl"); 
Spectra::set_motor_unit_backlash( "mot30", 0.); 

foreach my $pos_3d ( @pos_3d)
{
    if( !Spectra::move( $mot_3d => $pos_3d))
    {
        $status = Spectra::error( "failed to move $mot_3d");
        goto finish;
    }
    
    foreach my $pos_2d ( @pos_2d)
    {
        if( !Spectra::move( $mot_2d => $pos_2d))
        {
            $status = Spectra::error( "failed to move $mot_2d");
            goto finish;
        }
        #
        # inner loop: mot30
        #
        Util::log( "execute a mot30 scan, from $start to $stop "); 
        if( !Spectra::scan( type => "motor", 
                            device => "mot30", 
                            start => $start,
                            stop => $stop,
                            delta => 0.01,                 # step width 
                            st => $st,                  # sample time
                            comment => "$mot_2d at $pos_2d, $mot_3d at $pos_3d")
)
        {
            $status = Spectra::error( " Failed to scan ");
            goto finish;
        }
        #
        # this statement reverses the scan direction 
        ( $start, $stop) = ( $stop, $start); 
    }
}
finish:
Util::log( "mot30, set backlash to $bl"); 
Spectra::set_motor_unit_backlash( "mot30", $bl); 
$status;