Я сделал скрипт головы / хвоста в Perl, и я хочу, чтобы он запускался более одного раза - PullRequest
0 голосов
/ 17 февраля 2012

я знаю, что есть простая однострочная команда или команда, которая позволит ей запускаться снова и снова, пока я не убью ее, может кто-нибудь показать мне?

#!/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";
}

Это код.Я хочу, чтобы он спрашивал снова и снова после первоначального запуска

Ответы [ 3 ]

1 голос
/ 17 февраля 2012

здесь много предположений, но «однострочник или команда» из оболочки bash можно сделать с помощью:

$ while true; do perl yourscript.pl; done
1 голос
/ 17 февраля 2012

kbenson правильно, что вы можете заключить свой код в бесконечный цикл.Несколько более элегантный способ сделать это - создать функцию, которая проигрывает один раунд, а затем сделать бесконечный цикл вокруг вызова этой функции.Я использую здесь несколько хитростей, некоторые из которых могут быть для вас новыми, если вы чего-то не понимаете, спросите.Также я согласен с 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";
    }   
}   
1 голос
/ 17 февраля 2012

Просто оберните основную часть кода в цикле 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";
    }   
}   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...