• Publicidad

Duda con variables

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Duda con variables

Notapor BigBear » 2011-11-16 11:29 @520

Este es el problema: supuestamente la variable $link debería quedar con lo que estaba
determinado pero el problema es que no se muestra nada en el print() y no entiendo cuál es el error.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $op = "dos";
  2.  
  3. if ($op eq "uno") {
  4. my $link = "http://localhost/bad/aca/a";
  5. }
  6. if ($op eq "dos") {
  7. my $link = "http://localhost/bad/aca/b";
  8. }
  9. if ($op eq "tres") {
  10. my $link = "http://localhost/bad/aca/c";
  11. }
  12. if ($op eq "cuatro") {
  13. my $link = "http://localhost/bad/aca/d";
  14. }
  15. if ($op eq "cinco") {
  16. my $link = "http://localhost/bad/aca/e";
  17. }
  18.  
  19. print $link;
  20.  
  21. <stdin>;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


¿ Alguien me puede ayudar ?
BigBear
Perlero frecuente
Perlero frecuente
 
Mensajes: 981
Registrado: 2009-03-01 18:39 @818

Publicidad

Re: Duda con variables

Notapor explorer » 2011-11-16 12:03 @544

El problema son los my(): estás declarando variables $link dentro del contexto de cada if() (el contexto lo marcan las llaves.

Lo correcto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $op = 'dos';
  2. my $link;
  3.      
  4. if ($op eq 'uno') {
  5.     $link = 'http://localhost/bad/aca/a';
  6. }
  7. if ($op eq 'dos') {
  8.     $link = 'http://localhost/bad/aca/b';
  9. }
  10. if ($op eq 'tres') {
  11.     $link = 'http://localhost/bad/aca/c';
  12. }
  13. if ($op eq 'cuatro') {
  14.     $link = 'http://localhost/bad/aca/d';
  15. }
  16. if ($op eq 'cinco') {
  17.     $link = 'http://localhost/bad/aca/e';
  18. }
  19.      
  20. print $link;
  21.      
  22. <stdin>;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
aunque... quedaría mejor con el operador ternario en cascada:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $op = 'dos';
  2. my $link = ($op eq 'uno')    ? 'http://localhost/bad/aca/a'
  3.          : ($op eq 'dos')    ? 'http://localhost/bad/aca/b'
  4.          : ($op eq 'tres')   ? 'http://localhost/bad/aca/c'
  5.          : ($op eq 'cuatro') ? 'http://localhost/bad/aca/d'
  6.          : ($op eq 'cinco')  ? 'http://localhost/bad/aca/e'
  7.          : ''
  8.          ;
  9.      
  10. print $link;
  11.      
  12. <stdin>;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Incluso se puede abreviar algo más...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $op = 'dos';
  2. my $link = 'http://localhost/bad/aca/';
  3. $link   .= ($op eq 'uno')    ? 'a'
  4.          : ($op eq 'dos')    ? 'b'
  5.          : ($op eq 'tres')   ? 'c'
  6.          : ($op eq 'cuatro') ? 'd'
  7.          : ($op eq 'cinco')  ? 'e'
  8.          : ''
  9.          ;
  10.      
  11. print $link;
  12.      
  13. <stdin>;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
O también, usando hash:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $op = 'dos';
  2. my %links = (
  3.     uno    => 'a',
  4.     dos    => 'b',
  5.     tres   => 'c',
  6.     cuatro => 'd',
  7.     cinco  => 'e',
  8. );
  9.  
  10. my $link = "http://localhost/bad/aca/$links{$op}";
  11.      
  12. print $link;
  13.  
  14. <stdin>;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 0 invitados