escribí este código en Perl:Conversión de resultado de contexto de lista a matriz en una línea en perl?
shift(@interfaces = qx'ifconfig -s');
Y tiene este error:
Type of arg 1 to shift must be array (not list assignment)
Cuando escribo de esta manera:
@interfaces = qx'ifconfig -s';
shift @interfaces;
Se hace lo que yo quiero, que es para obtener el resultado del comando ifconfig como una matriz de líneas y eliminar el primer elemento de la matriz (que es un encabezado, no una interfaz real).
Mi preferencia personal es escribir esto como un trazador de líneas. Me parece que los paréntesis en el primer ejemplo deben hacer que la tarea se resuelva por completo, permitiendo así que shift vea las interfaces como una matriz, pero claramente Perl piensa que es una "asignación de lista".
Esta es sin duda una pregunta fácil para los gurús perl pero he buscado en Google y en Google y no he encontrado la iluminación.
Si alguien por favor proporciona la semántica específica para lograr lo que quiero en una línea, lo agradecería. Si también te gustaría tomar el tiempo para explicar por qué mi primera versión no funciona, estaría eternamente agradecido (enseña a un hombre a pescar y todo eso).
Gracias de antemano por su ayuda.
esta es una gran solución pero desde una perspectiva de mantenimiento quiero usar shift para enfatizar a un desarrollador futuro que estoy tirando el primer elemento de una matriz. Definitivamente estoy dando una respuesta a su respuesta, pero no es exactamente lo que quiero porque creo que no usar el cambio disminuye la claridad del código (YMMV, por supuesto). Gran respuesta sin embargo. – par
Al final he decidido que esto será lo suficientemente claro una vez que se entienda el modismo de asignación de undef (ser yo y los que finalmente tienen que mantener lo que estoy trabajando). Siempre debe haber un equilibrio entre la claridad del código y la facilidad de uso más adelante. La respuesta de Mob es asombrosa, pero creo que terminar con una matriz y no una matriz de referencia finalmente hará que el código sea más fácil de seguir. – par
Ok, obtienes un voto positivo por esa locura hacia el final, ** y ** para clasificarlos por duración. =) – TLP