#! /usr/bin/perl -w use strict; my $disk_count = pop; solve('A'..'C', reverse 1..$disk_count); sub solve { my ($peg_from, $peg_to, $peg_hold, $first_disk, @rest) = @_; return unless $first_disk; solve($peg_from, $peg_hold, $peg_to, @rest); print "$first_disk: $peg_from -> $peg_to\n"; solve($peg_hold, $peg_to, $peg_from, @rest); }