2012-02-17 5 views
0

シンプルなライナーやコマンドがあります。私はperlでhead/tailsスクリプトを作成しましたが、複数回実行したいです

#!/usr/bin/perl 
print "Content-type: text/html\n\n"; 
print "Please type in either heads or tails: "; 
$answer = <STDIN>; 
chomp $answer; 
while ($answer ne "heads" and $answer ne "tails") { 
    print "I asked you to type heads or tails. Please do so: "; 
    $answer = <STDIN>; 
    chomp $answer; 
} 
print "Thanks. You chose $answer.\n"; 
print "Hit enter key to continue: "; 
$_ = <STDIN>; 
if ($answer eq "heads") { 
    print "HEADS! you WON!\n"; 
} else { 
    print "TAILS?! you lost. Try again!\n"; 
} 

コードです。私はそれが最初の実行の後に何度も何度も聞いてほしい

+0

詳細を教えてください。同じファイルに対して何度も何度も実行したいのですか?新しいデータが追加されたかどうかを判断することはできますか? – kbenson

+1

#!/ usr/bin/perl "Content-type:text/html \ n \ n"; print "頭や尾を入力してください:"; $ answer = ; chomp $ answer; while($ answer ne "heads"と$ answer ne "tails"){ print "私はあなたに頭や尾を打つように頼みました。 $ answer = ; chomp $ answer; } print「ありがとうございます。あなたは$ answerを選択しました。\ n」; print "続行するにはEnterキーを押してください:"; $ _ = ; if($ answer eq "heads"){ "HEADS!you WON!\ n"; } else { "テール?失った!"もう一度やり直してください。\ n "; } コードは、私はそれが最初の実行の後に何度も何度も聞いて欲しいです。 – matth0x

+0

@ matth0x:あなたの投稿を編集してコードを入れて、あなたのコメントを削除してください。 –

答えて

1

ちょうどwhileループでコードの主要な部分を包む。

ここ
#!/usr/bin/perl 
print "Content-type: text/html\n\n"; 
while (1) { 
    print "Please type in either heads or tails: "; 
    $answer = <STDIN>; 
    chomp $answer; 
    while ($answer ne "heads" and $answer ne "tails") { 
     print "I asked you to type heads or tails. Please do so: "; 
     $answer = <STDIN>; 
     chomp $answer; 
    } 
    print "Thanks. You chose $answer.\n"; 
    print "Hit enter key to continue: "; 
    $_ = <STDIN>; 
    if ($answer eq "heads") { 
     print "HEADS! you WON!\n"; 
    } else { 
     print "TAILS?! you lost. Try again!\n"; 
    } 
} 
+0

と 'print 'をもう一度入れたら? chomp(my $ again = <>);最後に$ again =〜/ no/i; '最後のブレースのすぐ上に、今すぐ正常に終了することができます。 –

1

仮定の多くが、bashシェルから「ワンライナーまたはコマンドが」で行うことができます。

$ while true; do perl yourscript.pl; done 
1

kbensonあなたは無限にあなたのコードを囲むことができることが正しいですループ。これをややエレガントにする方法は、1ラウンド再生する関数を作成し、その関数呼び出しの周りに無限ループを作ることです。私はここでいくつかのトリックを使用します。その中には新しいものがあります。何かを理解できない場合は、お尋ねください。また、私はcjmに同意します、なぜ私はそれを残してコンテンツの種類があるのか​​分からない。

#!/usr/bin/env perl 

use strict; 
use warnings; 

while (1) { 
    play_round(); 
    print "Would you like to play again?: "; 
    my $answer = <STDIN>; 
    if ($answer =~ /no/i) { 
    print "Thanks for playing!\n"; 
    last; #last ends the loop, since thats the last thing exit would work too 
    } 
} 

sub play_round { 
    print "Please type in either heads or tails: "; 
    my $answer = <STDIN>; 
    chomp $answer; 
    while ($answer ne "heads" and $answer ne "tails") { 
     print "I asked you to type heads or tails. Please do so: "; 
     $answer = <STDIN>; 
     chomp $answer; 
    } 
    print "Thanks. You chose $answer. Now I'll flip.\n"; 

    sleep 1; 

    my @coin = ('heads', 'tails'); 
    my $side = $coin[int rand(2)]; 

    print "And its ... $side! "; 
    if ($answer eq $side) { 
     print "You WON!\n"; 
    } else { 
     print "Sorry, you lost. Try again!\n"; 
    } 
} 
関連する問題