The when
construct can match against many types of expressions including
scalars, aggregates, references, arbitrary comparison expressions,
and even code references.
lhp@nereida:~/Lperltesting$ cat -n given2.pl 1 #!/usr/bin/env perl 2 use Modern::Perl; 3 # referencias a las 3 funciones 4 my @options = ( \&piedra, \&papel, \&tijeras ); 5 6 do { 7 say "¡Piedra, Papel, Tijeras!. Elije: "; 8 chomp( my $user = <STDIN> ); 9 my $computer_match = $options[ int rand @options ]; 10 $computer_match->( lc( $user ) ); 11 } until (eof()); 12 13 sub piedra { 14 print "Elijo piedra. "; 15 given (shift) { 16 when ('papel') { say "Tu ganas!"; break; } 17 when ('piedra') { say "Empatados!"; break; } 18 when ('tijeras') { say "Yo gano!"; break; } 19 default { say "No te entiendo"; exit(0); } 20 } 21 } 22 23 sub papel { 24 print "Elijo papel. "; 25 given (shift) { 26 when (/^\s*papel/) { say "Empatados!"; break; } 27 when (/^\s*piedra/) { say "Yo gano!"; break; } 28 when (/^\s*tijeras/) { say "Tu ganas!"; break; } 29 default { say "No te entiendo"; exit(0); } 30 } 31 } 32 33 sub tijeras { 34 print "Elijo tijeras. "; 35 given (shift) { 36 when (/^\s*papel\s*$/) { say "Yo gano!"; break; } 37 when (/^\s*piedra\s*$/) { say "Tu ganas!"; break; } 38 when (/^\s*tijeras\s*$/) { say "Empatados!"; break; } 39 default { say "No te entiendo"; exit(0); } 40 } 41 }
Perl ejecuta default
cuando ninguna de las otras condiciones casa.
lhp@nereida:~/Lperltesting$ ./given2.pl ¡Piedra, Papel, Tijeras!. Elije: piedra papel Elijo tijeras. No te entiendo lhp@nereida:~/Lperltesting$ ./given2.pl ¡Piedra, Papel, Tijeras!. Elije: piedra papel Elijo piedra. No te entiendo lhp@nereida:~/Lperltesting$ ./given2.pl ¡Piedra, Papel, Tijeras!. Elije: piedra papel Elijo piedra. No te entiendo lhp@nereida:~/Lperltesting$ ./given2.pl ¡Piedra, Papel, Tijeras!. Elije: piedra papel Elijo piedra. No te entiendo lhp@nereida:~/Lperltesting$ ./given2.pl ¡Piedra, Papel, Tijeras!. Elije: piedra papel Elijo papel. Yo gano! piedra papel ¡Piedra, Papel, Tijeras!. Elije: Elijo piedra. No te entiendo
~/Lperltesting$ perl5.10.0 given2.pl ¡Piedra, Papel, Tijeras!. Elije: tijeras Elijo papel. Tu ganas! tijeras ¡Piedra, Papel, Tijeras!. Elije: Elijo piedra. No te entiendo
Casiano Rodríguez León