4 votes

La mise en place de $/=" \R " permettent à chomp() de fonctionner correctement avec la plupart des fichiers en perl ?

Quelqu'un sait-il avec certitude si le réglage $/="\R"; permettra à chomp() de faire ce qu'il faut, c'est-à-dire supprimer toutes les conventions de fin de ligne présentes sur une ligne ?

Plus précisément, j'exécute des scripts sur Windows et UNIX et je dois traiter des fichiers qui proviennent du net et dont les conventions de fin de ligne sont inconnues : MS-DOS, UNIX, MacOS < 9, peu importe.

Je suis récemment tombée sur " \R "mais je ne l'avais jamais vu avant. Je pense que c'est nouveau. Enfin, plus récent que Perl 5.006. (Ça fait un moment.)

Le " \R "prétend faire les nouvelles lignes Unicode, également. Je n'ai aucun moyen de tester cela correctement.

Merci.

-Erik

J'ai été surpris d'apprendre qu'il y a en fait une balise "newline" dans stackoverflow .

8voto

Steffen Ullrich Points 56226

La mise en place de $/=' \R ' permettent à chomp() de fonctionner correctement avec la plupart des fichiers en perl ?

Réglage de $/ a '\R' nous considérerons la séquence de deux caractères "\\R" comme une nouvelle ligne.
Réglage de $/ a "\R" entraînera un avertissement concernant une Unrecognized escape .

\R n'est pas une chaîne de caractères mais n'a de sens que dans le contexte des expressions régulières. Mais la documentation de $/ indique clairement :

Rappelez-vous : la valeur de $/ est une chaîne, pas une regex. awk doit être meilleur pour quelque chose :-)

1voto

mob Points 61524

J'ai créé Acme::InputRecordSeparatorIsRegexp il y a un certain temps pour plaisanter, mais il fournit une solution de contournement pour la restriction que $/ ne peut pas être une expression régulière. Avec la version 0.04 (qui vient d'être téléchargée), vous pouvez dire

use Acme::InputRecordSeparatorIsRegexp ':all';

open my $fh, '<:irs(\R)', 'file-with-ambiguous-line-endings.txt';
autochomp($fh,1);     # or (tied *$fh)->autochomp(1)
@lines = <$fh>;
...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X