Cuando digo simple, quiero decir, dentro de una expresión, para que pueda incluirlo como un valor en un hash sin prepararlo primero. Publicaré mi solución pero estoy buscando una mejor que me recuerde menos a VB. :)¿Cuál es la forma más sencilla de devolver la primera línea de una cadena multilínea en Perl?
Respuesta
¿Qué tal
(split /\n/, $s)[0]
?
No tiene que preocuparse por \ n no ser multiplataforma porque Perl is clever enough to take care of that.
¡Gracias, eso es lo que estaba buscando! Espero leer ese artículo también, ya que he tenido problemas con los saltos de línea en el pasado, pero tal vez no fue culpa de Perl. – Kev
Bueno, Perl hace \ n significa cosas diferentes en diferentes sistemas, pero eso no significa que \ n es el separador de registros para la entrada. :) –
Y, esperemos que esta cadena no sea enorme :) –
Esto no es tan simple como te gusta, pero ser simple solo para ser bajo no siempre debe ser el objetivo.
Puede abrir un gestor de archivo en una cadena (como referencia escalar) y tratarlo como un archivo para leer la primera línea:
my $string = "Fred\nWilma\Betty\n"; open my($fh), "<", \$string or die ...; # reading from the data in $string my $first_line = <$fh>; # gives "Fred" close $fh;
Si realmente quería, supongo que se podría reducir esto a una expresión:
$hash{$key} = do { open my($fh), "<", \$string; scalar <$fh> };
No importa el método que elija, siempre se puede hacer una subrutina para devolver la primera línea y luego utilizar la llamada de subrutina en su asignación de hash.
sub gimme_first_line { ... } $hash{$key } = gimme_first_line(\$string);
($str =~ /\A(.*?)$/ms)[0];
Para las grandes cadenas, esto va a ser más rápido que
(split /\n/, $str)[0]
según lo sugerido por Manni. [Editar: mención errónea eliminado de split /\n/, $str, 1
.]
Si desea incluir el terminal de \n
si está presente, agregue \n?
justo antes de los paréntesis de cierre en la expresión regular.
En lugar de su primera sugerencia, ¿por qué no simplemente '($ str = ~ /^(.*)/)[0]; ¿? –
@JoshuaGreen: Incluso puede deshacerse del '^' en su solución. De cualquier forma es más conciso que el mío, pero es más difícil de entender porque se basa en que el lector del código es consciente de que '.' no concuerda con' \ n' en ausencia de '/ s'. Para 5 caracteres más, mi código hace que la semántica sea difícil de entender mal. –
Sí, me di cuenta esta mañana que el '^' es superfluo. Honestamente, no pude seguir mucho de lo que estaba haciendo tuyo sin buscarlo todo, pero eso se debió principalmente a la falta de conocimiento de mi parte. Ni siquiera hubiera pensado en usar una expresión regular para esta tarea. –
- 1. ¿Cuál es la forma más sencilla de agregar uno a una cadena binaria en Perl?
- 2. ¿Cuál es la forma más sencilla de realizar una solicitud HTTP GET en Perl?
- 3. ¿Cuál es la forma más limpia de escribir una cadena multilínea en JavaScript?
- 4. ¿Cuál es la forma más sencilla de intercambiar char en una cadena con Python?
- 5. ¿Cuál es la forma más sencilla de muestrear continuamente desde la línea de entrada utilizando C#
- 6. VBScript: ¿Cuál es la forma más sencilla de formatear una cadena?
- 7. ¿Cuál es la forma más sencilla de crear una ventana con forma en wxPython?
- 8. ¿Cuál es la forma más fácil de animar una línea?
- 9. C# - La manera más sencilla de eliminar la primera aparición de una subcadena de otra cadena
- 10. ¿Cuál es la forma más sencilla de formatear una marca de tiempo de SQL en PHP?
- 11. ¿Cuál es la forma más sencilla de obtener resultados de scripts de Python en la web?
- 12. forma más sencilla de insertar Perl en html
- 13. ¿Cuál es la forma más sencilla de extender una matriz numpy en 2 dimensiones?
- 14. ANTLR ¿Cuál es la forma más sencilla de realizar una gramática dependiente de sangría de pitón?
- 15. ¿Cuál es la forma más sencilla de actualizar la plataforma haskell a la última?
- 16. ¿Cuál es la forma más sencilla de conectar un dispositivo a un iPad desde una aplicación?
- 17. ¿Forma más sencilla de hacer coincidir una matriz de cadenas para buscar en Perl?
- 18. Java: forma más sencilla de obtener la última palabra en una cadena
- 19. ¿Cuál es la forma más sencilla de convertir char [] a/de tchar [] en C/C++ (ms)?
- 20. ¿Cuál es la forma más sencilla de convertir cadenas separadas por comas a int []?
- 21. ¿Cuál es la forma más sencilla de ofrecer/consumir servicios web en jython?
- 22. ¿Cuál es la forma más sencilla de escribir aplicaciones web en Haskell?
- 23. ¿Cuál es la forma correcta de dividir una línea de código Perl en dos?
- 24. ¿Cuál es la forma más sencilla de implementar el cifrado en WCF cuando se usa netTcpBinding?
- 25. ¿Forma más sencilla de construir una cadena mediante la interpolación de valores en un patrón Regex?
- 26. ¿Qué significa "lambda" en Python, y cuál es la forma más sencilla de usarlo?
- 27. Cuál es la forma más sencilla de bloquear un objeto en Django
- 28. ¿Cuál es la forma más sencilla de escribir bibliotecas portátiles cargables dinámicamente en C++?
- 29. ¿Cuál es la forma más sencilla de reproducir un MP3 en WPF?
- 30. ¿Cuál es la forma más sencilla de cargar dinero a través de Internet?
¿Por qué la aversión a prepararlo antes de tiempo? Por lo general, se necesita un mojo elegante para funcionar como un trazador de líneas, que es lo contrario de lo simple. Si bien es divertido resolver estas cosas, rara vez es una buena idea usarlos en un programa real, ya que cuanto más fanático se pone, más difícil es descubrirlo más adelante. –
Es una solución temporal. :) Buen punto sin embargo. – Kev