Quelle est la façon la plus simple de retour de la première ligne d'un multi-ligne de chaîne en Perl?
Quand je dis simple, je veux dire, à l'intérieur d'une expression, de sorte que je peux coller comme une valeur dans une table de hachage, sans aucune préparation préalable. Je vais poster ma solution mais je suis à la recherche d'une meilleure qui me rappelle de moins en moins de VB. 🙂
Pourquoi l'aversion pour le préparer à l'avance? Il prend généralement de fantaisie mojo pour travailler comme un one-liner, qui est à l'opposé de simple. Alors qu'il est amusant de comprendre ces choses, c'est rarement une bonne idée de les utiliser dans un programme réel, comme l'amateur que vous obtenez, plus il est difficile de comprendre plus tard.
C'est une solution temporaire. 🙂 Bon point cependant.
C'est une solution temporaire. 🙂 Bon point cependant.
OriginalL'auteur Kev | 2009-01-09
Vous devez vous connecter pour publier un commentaire.
Comment sur
?
Vous n'avez pas à vous soucier \n étant pas multi-plateforme, car Perl est assez intelligent pour prendre soin de cela.
Eh bien, Perl fait \n signifier différentes choses sur différents systèmes, mais cela ne signifie pas que le \n est le séparateur d'enregistrement pour l'entrée. 🙂
Et, espérons juste que cette chaîne n'est pas énorme 🙂
Bon point, Brian...dans ce cas, il ne l'est pas, c'est juste un message d'erreur.
Avez-vous déjà essayé d'utiliser 1 comme troisième paramètre de split? Que pensez-vous de séparation doit faire quand on lui dit de produire un seul élément? Vous devez divisé en au moins deux éléments, et même alors, vous vous retrouvez avec une liste qui contient encore plus de données à partir de la chaîne.
OriginalL'auteur innaM
Ce n'est pas aussi simple que vous le souhaitez, mais le fait d'être simple, juste pour être bref, ne devrait pas toujours être le but.
Vous pouvez ouvrir un descripteur de fichier sur une chaîne (comme un scalaire de référence) et de le traiter comme un fichier à lire la première ligne:
Si tu le voulais vraiment, je pense que l'on peut réduire cette expression:
Peu importe la méthode que vous choisissez, vous pouvez toujours faire un sous-programme de retour de la première ligne, puis utiliser le sous-programme appel dans votre hash affectation.
Non, c'est une chaîne de caractères en mémoire. Vous pouvez le traiter comme un fichier.
Oups, je n'ai pas lu ton code très soigneusement. Hein, je ne savais pas qu'on pouvais le faire!
OriginalL'auteur brian d foy
Pour les grandes chaînes, ce sera plus rapide que
comme suggéré par Manni. [Edit: suppression erronée mention de
split /\n/, $str, 1
.]Si vous souhaitez inclure le terminal
\n
si elle est présente, ajouter\n?
juste avant la parenthèse fermante dans la regex.($str =~ /^(.*)/)[0];
?Vous pouvez même obtenir débarrasser de la
^
dans votre solution. De toute façon, il est plus concis que le mien, mais plus difficile à comprendre, car il repose sur le lecteur de code étant conscient que.
ne correspond pas à une\n
en l'absence de/s
. Pendant plus de 5 caractères, que mon code fait la sémantique difficile de ne pas comprendre.Ouais, j'ai réalisé ce matin que le
^
est superflu. Honnêtement, je n'étais pas capable de suivre une grande partie de ce qui était la vôtre à faire sans regarder du tout, mais c'était surtout dû à un manque de connaissance de ma part. Je n'aurais pas même pensé à utilisation une regex pour cette tâche.OriginalL'auteur j_random_hacker
OriginalL'auteur Kev