#!/usr/bin/perl use strict; use warnings; my $disk = 20; my @position = ( '', ('A') x $disk ); # disk are all initially on peg A sub check_move { my $i; my ( $disk, $start, $end ) = @_; if ( $disk < 1 or $disk > $#position ) { die "Bad disk number $disk. should be 1..$#position.\n"; } } sub hprint { my ( $disk, $start, $end ) = @_; print "Move disk #$disk from $start to $end\n"; } sub hanoi { my ( $n, $start, $end, $extra, $move_disk ) = @_; if ( $n == 1 ) { $move_disk->( 1, $start, $end ); } else { hanoi( $n - 1, $start, $extra, $end ); $move_disk->( $n, $start, $end ); hanoi( $n - 1, $extra, $end, $start ); } } hanoi( $disk, 'A', 'B', 'C', \&check_move ); hanoi( $disk, 'A', 'B', 'C', \&hprint ); #### Use of uninitialized value in subroutine entry at hanoi.pl line 33. Can't use string ("") as a subroutine ref while "strict refs" in use at hanoi.pl line 33.