use strict;
use warnings;

my $num_disks = shift || 9;

my @towers = (       
        [ reverse(1 .. $num_disks) ],
        [ ],
        [ ]
        );

move_tower(0,1,$num_disks);
print_towers();

sub print_towers
  {
  # Ausgabe des aktuellen Stands ueber die
  # Referenz
  for my $a (0..2)
    {
    print ": ";
    print join(" ", @{$towers[$a]}); 
    print "\n";
    }
  print "\n\n";
  }

sub move_tower
  {
  my ($source, $dest, $how_many) = @_;

  return if ($how_many == 0);

  # Den dritten Turm suchen
  my $intermediate = 0 + 1 + 2 - $source - $dest;
  move_tower($source, $intermediate, $how_many-1);
  
  # aktuellen Stand ausgeben
  print_towers();
  
  # Eine Scheibe bewegen (Dereferenzieren der Arrays)
  push @{$towers[$dest]}, pop(@{$towers[$source]});
  move_tower($intermediate, $dest, $how_many-1);
  }

