The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

use Carp ;
use strict ;
use warnings ;

use Spreadsheet::Perl ; 

my $ss = tie my %ss, "Spreadsheet::Perl" ;

for
	(
	  ['A1', 1, 1]
	, ['Z9', 1, 0]
	, ['Z9', 1, 1]
	, ['ZZ1', 1, 1]
	, ['AAA1', -1, 0]
	, ['AAA1', -1, 0]
	, ['ABC5', 25, 3]
	, ['Z1', -25, 0]
	, ['Z1', -26, 0]
	, ['AA2', -26, -1]
	, ['AA2', -26, -2]
	)
	{
	my $offset_cell = $ss->OffsetAddress(@$_) ;
	my $offset_string = "Can't compute!" ;
	
	if(defined $offset_cell)
		{
		$offset_string = join ", ", $ss->GetCellsOffset($_->[0], $offset_cell) ;
		}
	else
		{
		$offset_cell = "Can't offset!" ;
		}
	
	print '' . (join(", ", @$_)) . " => " . $offset_cell . " offset: " . $offset_string  . "\n" ;
	}

# debug print out the adresses
$ss->{DEBUG}{ADDRESS_LIST}++ ;
$ss{'A1:B2'} = 1 ;
$ss{'B2:A1'} = 1 ;
$ss{'A4:B2'} = 1 ;
$ss{'B4:A2'} = 1 ;