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

variable $?

Estas en el tema de variable $? en el foro de Programación General en Foros del Web. Hola estoy pasando una aplicaicon de perl a php, y me he encontrado con esta sentencia: $ejecuta = `$alta`; $desplaza = $? >> 8; Creo ...
  #1 (permalink)  
Antiguo 23/06/2006, 02:39
Avatar de chuscazo  
Fecha de Ingreso: abril-2004
Mensajes: 84
Antigüedad: 20 años
Puntos: 0
variable $?

Hola estoy pasando una aplicaicon de perl a php, y me he encontrado con esta sentencia:

$ejecuta = `$alta`;
$desplaza = $? >> 8;

Creo que lo que hace es saber si la salida tiene mas de 8 bits. Pero no me aclaro muy bien.

Alguien sabe que valor toma $desplaza y porque?
¿Para que se utiliza $??

Gracias
  #2 (permalink)  
Antiguo 23/06/2006, 06:20
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
$? contiene el estado devuelto por la última orden externa...

Como ser system o qx//

habría que ver que hace tu script antes de esa línea...

Saludos
PD: Efectivamente El >> hace un desplazamiento en binario...8 bits a la derecha...
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 23/06/2006, 06:32
Avatar de chuscazo  
Fecha de Ingreso: abril-2004
Mensajes: 84
Antigüedad: 20 años
Puntos: 0
lo anterior

Lo que hace es esto:

$alta = "sudo /$ruta/script $parametros";
$ejecuta = `$alta`;
$desplaza = $? >> 8;

Estoy casi seguro que lo que recoge es la salida del script, y $desplaza lo utiliza luego para una comparcion:
if (!$desplaza)
{ # es correcta la ejecucion}
, asi que lo que pasa es que si la salida del script tiene mas de 8 bits es erronea la ejecucion. Asi que mas o menos se intuye lo que hace.
Muchas gracias, queria estar seguro de que contenia $? y no encontraba nada en la red.
Saludos
  #4 (permalink)  
Antiguo 23/06/2006, 06:36
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 19 años
Puntos: 2
Yo encontre tambien esos simbolos, pero en JavaScript:

http://www.forosdelweb.com/f13/no-entiendo-este-codigo-391609/

Creo que se trata de "desplazamiento de bits", que al final se traduce en multiplicar o dividir, si se trata de un numero
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.

Última edición por oskarL; 23/06/2006 a las 06:41
  #5 (permalink)  
Antiguo 24/06/2006, 13:27
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Cita:
Iniciado por chuscazo
Hola estoy pasando una aplicación de perl a php,...
Eso sí que es un problema... ¿por qué tienes que hacer semejante cosa?
  #6 (permalink)  
Antiguo 26/06/2006, 00:47
Avatar de chuscazo  
Fecha de Ingreso: abril-2004
Mensajes: 84
Antigüedad: 20 años
Puntos: 0
Pues en realidad estamos pasando una vieja aplicacion web que estaba en perl a php. ¿Por que? en verdad podria dejar la parte encagada de lanzar esos script remotos en perl y lo demas en php, el caso que necesitamos cambiar esa aplicacion porque ya tiene mucho tiempo y no funciona como debiera.
¿Cuales son tus objeciones?
La aplicacion solo es accesible desde la intranet, esta controlada por sesiones, pero creo que tu pregunta va mas orientada a la calidad de los lenguajes.
Aclaremelo porfa.
Un saludo
  #7 (permalink)  
Antiguo 26/06/2006, 04:58
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
La pregunta iba del porqué consideras que una aplicación es vieja y que no funciona como debiera... dicho de otra forma, ¿no es más fácil actualizar la aplicación Perl que empezar una nueva en PHP?
  #8 (permalink)  
Antiguo 26/06/2006, 05:19
Avatar de chuscazo  
Fecha de Ingreso: abril-2004
Mensajes: 84
Antigüedad: 20 años
Puntos: 0
La verdad que la apicacion 'vieja' al final me la conozco de memoria, el caso es que primero solo se hizo una pequeña aplicacion para suplir alguna deficiencia de la antigua y al final se ha optado por pasarla a PHP. ¿Porque? Supongo que por que es el lenguaje que mas domino y en el que estamos desarrollando otras aplicaciones de la intranet.
La verdad que tampoco me habria costado demasiado trabajo actualizar la antigua, pero mi jefe no queria tocar nada en ella y parece que los empleados le han empezado a cojer mania y todo.
Tu pregunta tiene mucho sentido y tienes razon. Pero ya esta casi terminada.
La verdad creo que tambien se esta haciendo en PHP porque sera mas facil de entender para otra persona en el futuro. Creo que es mas conocido este lenguaje. (creo)
Gracias por vuestro apoyo.
Una oregunta, ¿Que te parece el codigo de arriva? ¿Por que crees que el antiguo progamador lo habria echo asi? (me han dicho que era muy bueno) En teoria lo que hace es coger lo que le saca la ejecucion de un script via sudo o ssh .... sudo, segun la maquina. Creo que devuelve 0 en el ssh y OK en el sudo, si esta bien, si no a mi en php me saca un 1. Y el error se mira luego con un codigo en unas tablas.
¿Por que hace el desplazamiento de bits?

Gracias
  #9 (permalink)  
Antiguo 26/06/2006, 05:55
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 2 meses
Puntos: 90
depende de que esté haciendo la aplicación, nos colocaste solo 3 líneas del código, no sabemos con que estará trabajando...

Saludos
__________________
Esteban Quintana
  #10 (permalink)  
Antiguo 26/06/2006, 06:11
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
El porqué hace eso de mover el byte superior al inferior tiene que ver con la forma de funcionar de system, que es el comando interno que se ejecuta en la línea $ejecuta = `$alta`;.
El resultado queda en $?, que puede ser:
* -1 si algo ha fallado
* El valor del byte bajo indica la señal externa por la que el proceso murió, o 0. Si el bit 8 está puesto, ha ocurrido además un coredump
* El valor del byte alto es el resultado de la ejecución del proceso (el valor de devolución).

Como le interesaba sólo el valor de devolución, desplazó el byte alto para quedarse con ese valor.

perldoc -f system
  #11 (permalink)  
Antiguo 26/06/2006, 06:11
Avatar de chuscazo  
Fecha de Ingreso: abril-2004
Mensajes: 84
Antigüedad: 20 años
Puntos: 0
La lineas anteriores son para averiguar los parametros del script .pl que se quiere ejecutar segun la tabla que se este manipulando.

Quizas te sean de mas interes los scripts que se ejecutan. Para saber que devuelve. Y lo que devuelven es un numero. 0=ok y el resto son unos codigos de error que estan en la base de datos, por ejemplo 300=falta el numero de transaccion.
ejemplo de ejecucion de script.
`ssh -l user -v host sudo /home/ruta/alta_ip_red_fija user pass 0.0.0.0 255.255.255.255 adsl 1714`
y lo que devuelve eso es lo que recoge $?. Supongo, ya que no lo compara con nada mas. Es lo unico que hace para saber si el script se ejecuto bien.
No se que mas puedo decirte para ayudarte, pero la verdad que yo tampoco entiendo porque no lo compara con el 0, pero supongo que su razon tendra.

Supongo que esto explica porque se pasa a PHP, porque no hay dios que lo entienda y creo que tambien le faltan comentarios.

Saludos y gracias por el interes, aunque ya lo arregle me interesa saber que razonamiento haria el antiguo programador.
  #12 (permalink)  
Antiguo 26/06/2006, 06:42
Avatar de chuscazo  
Fecha de Ingreso: abril-2004
Mensajes: 84
Antigüedad: 20 años
Puntos: 0
WOOO muchas gracias.
a veces es muy dificil encontrar la informacion menos mal que estais vosotros y los foros.
Gracias a todos
  #13 (permalink)  
Antiguo 26/06/2006, 07:09
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Cita:
Iniciado por chuscazo
La verdad que la apicacion 'vieja' al final me la conozco de memoria, el caso es que primero solo se hizo una pequeña aplicacion para suplir alguna deficiencia de la antigua y al final se ha optado por pasarla a PHP. ¿Porque? Supongo que por que es el lenguaje que mas domino y en el que estamos desarrollando otras aplicaciones de la intranet.
La teoría informática sobre las olas de conocimiento en las nuevas generaciones se vuelve a cumplir...

Cita:
Iniciado por chuscazo
La verdad que tampoco me habria costado demasiado trabajo actualizar la antigua, pero mi jefe no queria tocar nada en ella y parece que los empleados le han empezado a cojer mania y todo.
Lo que hagan los demás empleados me da igual. Lo que quiero saber es si un día te animarás a aprender Perl.
Cita:
Iniciado por chuscazo
Tu pregunta tiene mucho sentido y tienes razon. Pero ya esta casi terminada.
La verdad creo que tambien se esta haciendo en PHP porque sera mas facil de entender para otra persona en el futuro. Creo que es mas conocido este lenguaje. (creo)
Sí, es más conocido. ¿Sabes por qué? Pero lo que no está garantizado es que otra persona lo pueda leer. Perl tiene 18 años y ha fracasado en tu empresa, ya que has tenido que cambiar una aplicación. Y sin hablar de que la nueva versión esté tan bien escrita que se pueda entender (me refiero a que no importa el lenguaje utilizado, se pueden escribir programas de forma tan enrevesada que no sean facilmente entendibles)

Lo que quiero decir es que, como profesionales de la Informática, cuando nos presentemos en un caso como estos debemos dar una razón tecnológica del porqué es necesario hacer el cambio.
* Que no conozcamos el lenguaje, no es culpa del programa
* Que tengamos manías y que el jefe no quiere que se toque, no es culpa del programa
* Que nosotros dominemos otros lenguajes no es culpa del programa.

En cambio,
* Si el programa empieza a funcionar mal, ahora, en este momento, es quizás porque ha cambiado el entorno de trabajo para el que fue diseñado. Es culpa del programador no haber previsto esas circunstancias (por ejemplo, disco duro lleno), pero no es culpa del programa ni del programador si la máquina donde corre es más lenta con respecto a sus vecinas.
* Si el programa no reconoce nuevas circunstancias que sí estaban previstas en el momento del diseño, entonces suele ser culpa del programador.
* Si el programa empieza a tener un comportamiento extraño por cambios en la API, sistema operativo, hardware o librerías más modernas, entonces sí, hablamos de que el programa es viejo y que hay que mantenerlo o cambiarlo.

Te contaré una cosa.
Yo entré en un departamento donde todo el mundo programa en C desde hace años, por la sencilla razón de que no saben otra cosa (son licenciados más preocupados por los aspectos formales del problema que por la forma de resolverlo, cosa que es trabajo del informático). Yo me encontré que había algunos scripts hechos en Perl, del que no tenía ni idea. Como alguno de ellos ya empezaba a funcionar mal, no por culpa suya si no porque los ficheros que tenía que procesar habían cambiado, aprendí a hacer algunos cambios y los dejé así. En esto que llega el jefe y dice. "¿Qué lenguaje es ese?". "Es Perl", respondo. "¿Y eso que és? No, no, no. Aquí se debe trabajar todos con el mismo lenguaje, porque si no es un follón", me dijo. Mi respuesta: "pues están funcionando en la web del departamento desde hace diez años, y en lugares vitales de todo el sistema". Se quedó muy sorprendido y se dió media vuelta, pensando que, como es natural, un jefe está para mandar y no para decir cómo se tienen que hacer las cosas, sobre todo cuando lo último que hizo de informática era con tarjetas perforadas.
A mí en cambio me picó la curiosidad y me dió por leerme todos los programas y entender un poco porqué se hizo así en su tiempo. Hablé con los dos programadores anteriores y me contaron que fue por cuestión de tiempo, nada más. Y claro, se veía que el código estaba muy mal hecho por culpa de esas prisas. Y ahora viene la pregunta crucial: ¿qué hago? Puedo reescribir esos programas a C o C++, como decía el jefe, o a cualquiera de la media docena de lenguajes que puedo usar -porque los domino, PHP incluído-, o también puedo aprender Perl.
Yo opté por la última... si un lenguaje tiene 18 años de vida, será por algo... Entonces entré en CPAN y lo entendí.
Empezé a escribir programas más pequeños, de los que los compañeros me pedían (scripts para filtrar nombres de ficheros, hacer ftps, mirros de webs, tareas en el cron y cosas así). Pero poco a poco me dí cuenta de que se podía hacer algo más. Mis compañeros se mostraban extrañados de un lenguaje que por supuesto no sabían, pero que más o menos podían leer. Lo que sí veían es que la velocidad de producción era muy alta -con las expresiones regulares hacía en dos líneas lo que ellos en más de 30-, así que poco a poco me pedían más nivel. Al final, conseguí entrar en el terreno del procesado de ficheros, un terreno que era coto privado del C, pero resulta que el programa en Perl que yo escribí lo hice en la cuarta parte de tiempo, en la trigésima parte de líneas y procesaba el fichero a un 80% del tiempo anterior... y cuando no quedaba más remedio que decir que C era superior a Perl en cuanto a velocidad, tampoco pasaba nada... se puede meter código C dentro de Perl y así obtienes lo mejor de ambos mundos.

Bueno, esto sólo es una opinión personal. No quiero que pienses que soy un hincha acérrimo. Yo suelo siempre pensar en el mejor lenguaje para resolver un problema antes de empezar. Lo que pasa es que la mayoría de las veces Perl juega con ventaja. Fíjate que ahora mismo estoy con una aplicación 'antigua' en PHP que me está dando tantos problemas que he tenido tentaciones de reescribirla en Perl, pero me digo que no, que hay que seguir con PHP, porque sino se me va a olvidar, como ya me ha pasado con el Java
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 22:49.