use warnings; use strict; my @words = qw(believe beleive beeliv pelief); spelling_check( $words[0], $_ ) for @words[ 1 .. $#words ]; sub spelling_check { no warnings 'uninitialized'; my @wrds; push @wrds, [ split //, $_ ] for @_; my ( $right, $wrong ) = q{} x 2; for ( 0 .. $#{ $wrds[0] } ) { if ( $wrds[0]->[$_] ne $wrds[1]->[$_] ) { $right .= defined( $wrds[1]->[$_] ) ? $wrds[1]->[$_] : qw'-'; $wrong .= defined( $wrds[0]->[$_] ) ? $wrds[0]->[$_] : qw'-'; } } print join( ' ~ ' => ( $right, $wrong ) ), $/; }