Foros del Web » Programación para mayores de 30 ;) » Programación General »

can't call the method __get an undefined value

Estas en el tema de can't call the method __get an undefined value en el foro de Programación General en Foros del Web. Hola chicos Soy programador PHP y intento crear una clase en Perl. Solo tiene 2 method (por ahora). Estoy probando con el perl -d (mi ...
  #1 (permalink)  
Antiguo 16/09/2008, 04:09
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 18 años, 1 mes
Puntos: 0
can't call the method __get an undefined value

Hola chicos

Soy programador PHP y intento crear una clase en Perl.
Solo tiene 2 method (por ahora). Estoy probando con el perl -d (mi fichero) en ms dos el depurador de perl y me siguente error:

can't call the method __get an undefined value

la clase es esta (fichero Crypt.pm)
Código PHP:
package Crypt;

    
sub new {
     
my $this=shift;
       
my $class ref($this) || $this;
     
my $self={}; 
        
$self ->{mode} = "base64 encode";
        
$self ->{key}   = "blablablablablabla1234";
    
bless $self$class;
    return (
$self);
    }


    
    
sub __get{
        
        
my $self=shift;
        
my $param1 shift(@_);
        if (
$param1 == "key") {
         return 
$self->{key};
        } 
        if (
$param1 == "key") {
            return 
$self->{mode};
        }
    } 
y la llamo asi

Código PHP:
my $ob = new Crypt();
$ob -> __get("key"); 

Y da el error can't call the method __get an undefined value.

Alguien puede echar un mano? No entiendo que quiere decir este error.

Un cordial saludo a todos.
  #2 (permalink)  
Antiguo 16/09/2008, 06:27
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 9 meses
Puntos: 90
Respuesta: can't call the method __get an undefined value

Algunas cositas...

shift(@_); # puedes escribir directamente shift, no hace falta colocar @_

Después, los 2 IF comparan si param1 == key ! el segundo debería de ser mode

Luego si vas a comprar strings debes usar la función eq de equivalencia y ne para no equivale...El == es para números...

Otra cosa, si la función __get devuelve un valor es bueno llamarla tomando su valor

my $g_ret = __get("key");

Espero que te sirva, talvés con algo de eso soluciones tu problema, no se exactamente donde estará la solución...

Saludos
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 16/09/2008, 07:15
 
Fecha de Ingreso: septiembre-2006
Mensajes: 349
Antigüedad: 18 años, 1 mes
Puntos: 0
Respuesta: can't call the method __get an undefined value

Gracias!
Fallo "==". Teien que ir "eq" (en php es el mismo para string o numericos). Una cosa mas para aprender.

Si me puedes echar un vistazo a esta funcion.
Estan todas las variables iniciadas, los bucles serrados y peta. con el mismo error.
Código PHP:
sub Criptar{
        
my $self=shift;
        
my $param1 shift;
        
my $encrypt "";
        for (
my $i=0;$i<length($param1);$i++) {
            
my $caracter substr($param1$i1);
                 
$encrypt .= $caracter $self->{key}[$i &#37; length($self->{key})];
            
$encrypt encode_base64($encrypt"");
            return 
$encrypt;
        }
    } 
Un cordial saludo, VIctoria

Gracias ya lo resolvi!
Quedaria asi


sub Criptar{
my $self=shift;
my $param1 = shift; #string to encode
my $encrypt = "";
my $part = "";
for (my $i=0;$i<length($param1);$i++) {
$part = substr($self->{key}, $i % length($self->{key}), 1);
$encrypt = $encrypt . ((substr($param1, $i, 1) ^ $part));
}
$encrypt = encode_base64($encrypt, "");
return $encrypt;
}

El perl no puede devolver una parte de string de esta forma

$string = "asdasa";
print ($string[2]); // peta porque no puede!
El php devolve "d".

Un cordial saludo, Victoria

Última edición por viktoria; 16/09/2008 a las 09:14
  #4 (permalink)  
Antiguo 16/09/2008, 12:57
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 525
Antigüedad: 18 años, 6 meses
Puntos: 11
Respuesta: can't call the method __get an undefined value

En Perl se usa substr() para extraer partes de un string. De hecho, lo has usado tu misma en la función Criptar().

En el caso del ejemplo, sería substr($string,2,1).
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:41.