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
