Perl 简单的猜单词脚本
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl 简单的猜单词脚本相关的知识,希望对你有一定的参考价值。
Last update:17/02/03
输入格式:每行一个句子,关键词用[]标示,如:
If you are [suspicious] of sth, you don‘t know whether it is true or possible.
If you [strive] to do sth, you make a great effort to achieve it.
He commited [suicide] in despair, leaving his wife alone.
According to all the evidence we have got, he is [presumably] the criminal.
[Toxic] substance is contained in rotten foods.
脚本从文件中读入上述信息,利用正则表达式提取关键词
代码如下:
1 #!/usr/bin/perl 2 use 5.018; 3 4 my @word; 5 my @sentence; 6 7 my $pattern = "[A-Za-z\-]"; 8 9 say "Input the file name:"; 10 chomp (my $fileName = <STDIN>); 11 open FIN, $fileName; 12 13 while (<FIN>) 14 { 15 chomp; 16 if (/ \[ (${pattern}+) \] /x) 17 { 18 my $curWord = $1; 19 my $underline = ($curWord =~ s/$pattern/_/rg); 20 push @word, $curWord; 21 push @sentence, (s/ \[ $curWord \] /$underline/rx); 22 } 23 } 24 close FIN; 25 26 my $id; 27 my ($rightCnt, $wrongCnt); 28 say "\nGuess the word according to context."; 29 say "Hint: Case of letters does not matter."; 30 say "Hint: you can input a question mark to give up."; 31 &getNext; 32 33 while (1) 34 { 35 chomp (my $ans = <STDIN>); 36 if ($ans =~ /\b $word[$id] \b/xi) 37 { 38 printf "Right! Right/Wrong = %d/%d\n", ++$rightCnt, $wrongCnt; 39 &getNext; 40 } 41 elsif ($ans eq "?") 42 { 43 printf "Give up. Right/Wrong = %d/%d\n", --$rightCnt, ++$wrongCnt; 44 say "The answer is: $word[$id]"; 45 &getNext; 46 } 47 else 48 { 49 say "Wrong!"; 50 ++$wrongCnt; 51 redo; 52 } 53 } 54 55 sub getNext 56 { 57 state $N = 0; 58 $id = int (rand @word); 59 printf "Problem #%d: %s (%d words)\n", ++$N, $sentence[$id], length $word[$id]; 60 }
以上是关于Perl 简单的猜单词脚本的主要内容,如果未能解决你的问题,请参考以下文章