##
C# F# G# G#7
##
##
use strict;
use warnings;
my %notes_hash = (
'A' => 0,
'A#' => 1,
'B' => 2,
'C' => 3,
'C#' => 4,
'D' => 5,
'D#' => 6,
'E' => 7,
'F' => 8,
'F#' => 9,
'G' => 10,
'G#' => 11
);
my @notes_array = ( sort( keys(%notes_hash) ) );
sub transpose {
my ( $note, $amount ) = @_;
my ( $base_note, $modifiers ) = $note =~ m/^([ABCDEFG]#?)(.*)/;
return
$notes_array[ ( ( $notes_hash{$base_note} + $amount ) % 12 ) ]
. $modifiers;
}
print transpose( 'C#7', 1 );