#!/usr/bin/perl -w use strict; open(my $fh, "<", $ARGV[0]) or die "cannot open input file: $!"; my @words = <$fh>; close $fh or die "cannot close input file: $!"; my $words = @words; chomp(my $word = lc($words[int(rand($words))])); my (%correct, $guesses); my $turns = 8; while ($turns > 0) { my $displayed; foreach my $char (split(//, $word)) { $displayed .= exists($correct{$char}) ? "$char " : "* "; } if (index($displayed, "*") < 0) { print "\nYou win! You guessed $word!\n"; exit; } print "\n$displayed\n", "Fails remaining: $turns\n", "Your guesses: $guesses\n", "Next guess: "; chomp(my $guess = ); $guess = lc($guess); if ($guess !~ /[a-z]/ || length($guess) != 1 || index($guesses, $guess) >= 0) { print "\nInvalid guess.\n"; } else { my %word = map { $_ => 1 } split(//, $word); if (exists($word{$guess})) { $correct{$guess}++; } else { $turns--; } $guesses .= "$guess "; } } print "\nYou lost! The word was $word!\n";