explorer escribiste:Bienvenido a los foros de Perl en Español, sergiarcano.
Muchas gracias
explorer escribiste:sergiarcano escribiste:El xml se carga en una estructura tipo hash (la cual reconozco que no soy capaz de "dibujar" en mi cabeza para entenderla bien)
Hazle un Dump, y listo
Sí, sí... si ahí lo veo... pero cuando empiezo a ver %xxx, $xxx, $xxx{yyy}, $xxx->{yyy}, \%xxx, keys(%{$xxx}), ref($xxx->{yyy}), xxx->{yyy}[2]->{rrr}, @{xxx->{yyy}}... ufff, me pierdo completamente, ya no sé lo que es cada cosa y qué demonios me va a devolver (eso se aplica también a $_ y @_). De todos modos digamos que llevo tan sólo una semana con Perl, así que... poco a poco
.
explorer escribiste:sergiarcano escribiste:He tratado de aplicar lo que previamente había probado en un script que he hecho aparte a modo de prueba:
¿Por qué has puesto un chomp()?
Básicamente porque cuando uno no entiende por qué no funciona algo, empieza a hacer pruebas sin sentido... Pero vamos, funciona exactamente igual con él que sin él, así que ya está borrado.
explorer escribiste:sergiarcano escribiste:Tampoco me funciona bien la regex (quiero que me sirva que me pasen como parámetro alive* y que haga las llamadas para alive_gps y alive_tth, por ejemplo...
En ese caso, el patrón a buscar no es 'alive*', sino 'alive\w+' o 'alive.+'. Los comodines en los patrones de expresión regular funcionan de forma diferente a los comodines de la shell.
Cierto, pero viendo ejemplos había entendido un matiz ligéramente distinto. Ya está cambiado y funcionando, aunque en realidad también me realiza la llamada de "memory" si le paso como parámetro "memo"... y sólo debería valer para "memory*", pero ya lo afinaré mejor.
explorer escribiste:sergiarcano escribiste:En fin, que seguro que es una chorrada muy grande, pero yo soy tan novato como grande será dicha chorrada
Pues el caso que el grep() sí que puede estar mal... Tienes puesto
grep ( $_, @duplicateArray ). grep() devuelve los elementos de
@duplicateArray para los cuales la primera expresión es verdadera. ¿Y qué es lo que tienes en la primera expresión? Pues el nombre de una clave (una cadena de caracteres). Así que... a menos que esa cadena de caracteres sea la cadena vacía, el grep() siempre devuelve verdadero, por lo que siempre te rechazará todas las claves almacenadas en @duplicateArray, a partir de la segunda clave que analices.
Vale, había entendido que esa estructura funcionaba buscando el primer valor en el segundo ($_ en @duplicateArray) y devolviendo verdadero si lo encontraba (vamos, parecido a como funciona en la shell). Eso me pasa por mirar más los ejemplos y creer entenderlos, que la documentación de la propia función
Te agradezco mucho los ejemplos de código que me has puesto, pero no los puedo aplicar directamente porque se supone que, a priori, no conozco los nombres de las claves para meterlos en un
array si no que tengo que usar una función que me han dado que me devuelve lo que tengo en el xml en una estructura
hash a partir de la cual obtengo un
array con una estructura como esto:
Using perl Syntax Highlighting
$VAR1 = {
'service' => {
'memory' => {
'xxx' => 'yyy',
'rrr' => {
'ccc' => {
'ttt' => 'ddd',
'aaa' => 'sss'
}
},
'qqq' => {
'www' => 'yy',
'eee' => 'u'
}
},
'test' => {
'xxx' => 'ppp',
'rrr' => {
.
.
.
}
}
}
};
Coloreado en 0.001 segundos, usando
GeSHi 1.0.8.4
Y de ahí tengo que obtener los nombres de los servicios. Como, por lo que me dijo la persona de aquí que lleva este tema, directamente no puedo "leerlos", necesito recorrerlo con los dos foreach anidados para @xmlArray y keys(%{$_}) y entonces obtengo el nombre de los servicios en $_... y lo que he entendido es que al usar el grep, cambiará el valor de $_, ¿no?
De todos modos (perdón por el rollo), lo más gracioso es que ¡da igual! Resulta que a partir de lo que me mandaste fui haciendo pruebas para "apañarlo" a mi
script y acabé descubriendo que el módulo que me han dado para usar y que inserta los valores en la estructura
hash a partir del xml ¡¡descarta los duplicados!! Vamos, que usando lo que me han dado no puedo hacerlo. Si tengo que usar lo que me han dado, tendría que, en otro punto del
script, leer el xml una segunda vez de otra forma para ver si hay duplicados o no...