J'écris un script sur ma machine personnelle qui est connectée au serveur distant. Je pense que le serveur distant a Perl 4.0 ou version inférieure installée et c'est pourquoi il est incapable de reconnaître la même chose. Y a-t-il une alternative à la commande chomp
?Comment puis-je chomp une chaîne si j'ai Perl 4?
Répondre
Ce n'est pas un remplacement exact, mais vous pouvez essayer:
$var =~ s/\r?\n?$//
qui dépouillera soit CRLF (DOS), LF (Unix), CR (Mac?).
L'opérateur chomp normal élimine toujours le $INPUT_RECORD_SEPARATOR
actuellement défini pour l'O/S actuel.
Bonne idée, mais si $ var peut contenir plusieurs lignes séparées par \ n, méfiez-vous - en fonction de la façon dont Perl 4 interprète "$" dans une regex, ce qui précède peut supprimer le premier \ n plutôt que le dernier. –
Au lieu de chomping, il suffit de se débarrasser de la valeur de $ /, comme vous l'avez mentionné. –
Je pensais à ça, mais je n'avais pas un ensemble de pages de manuel Perl 4 à la main pour vérifier que ça marcherait. Quoi qu'il en soit, je préfère que mes analyseurs d'entrée suivent la loi de Postel ("Soyez strict dans ce que vous produisez, et libéral dans ce que vous acceptez"), donc ma version fonctionne indépendamment du format DOS ou Unix. – Alnitak
Je crois que chop() a été utilisé dans pré-5 perl. Pas aussi utile que chomp() bien sûr. Si vous manipulez entrée aléatoire vous seriez probablement mieux d'utiliser une expression rationnelle, mais si vous êtes toujours l'analyse syntaxique fichier au format unix:
while (<F>) {
chop();
do_stuff();
}
Comme le commentaire ci-dessous les états, chop() supprime toujours le dernier caractère de la lvalue, pas seulement s'il s'agit d'un caractère de nouvelle ligne (ou de ce qui se trouve dans la ligne qui se termine par var). Je le savais (d'où le commentaire "pas aussi utile que chomp()") mais j'ai oublié de le taper.
Pour clarifier: la différence entre chop et chomp est que chop * always * supprime le dernier caractère, qu'il s'agisse du $ INPUT_RECORD_SEPARATOR actuel ou non. – user55400
Et, le séparateur d'enregistrement d'entrée pourrait être plus d'un caractère :) –
Brian, quelle était alors la convention en perl4? Je ne parle vraiment que perl5, mais le code perl4 que j'ai dû réviser utilisait "chop()" comme les gens utilisent maintenant "chomp()", car ils comprenaient le format du fichier qu'ils allaient analyser. S'il était idiomatique de ne pas utiliser chop() ou d'en emballer beaucoup dans une logique de protection, pourriez-vous donner un exemple? Sinon, malgré mes downvotes, je pense que ma réponse de "chop() était l'alternative pas-bonne à chomp() dans perl4" est une réponse très valide à "Y at-il une alternative à chomp() dans perl4?" – jj33
Aller à la route de la côtelette est mal conseillé, je voudrais utiliser la regex, ils sont plus mantainable et transparent pour les autres. La modification habituelle de la variable d'enregistrement finira par provoquer la polution d'un paquetage médiocre et provoquer des événements étranges.
- 1. En Perl, comment savoir si une chaîne est un nombre?
- 2. Comment puis-je répéter une chaîne N fois en Perl?
- 3. Comment générer une chaîne à 4 chiffres unique
- 4. Comment effectuer une recherche groupée et remplacer Perl?
- 5. Exécution de JAI dans OSGi
- 6. JAI Changer la résolution JPEG
- 7. Obtenez les 4 prochains mois dans une chaîne formatée
- 8. Comment séparer une chaîne en deux parties avec Perl?
- 9. Comment puis-je convertir une chaîne en nombre en Perl?
- 10. Comment convertir une chaîne binaire en nombre en Perl?
- 11. Comment puis-je trouver une sous-chaîne dans une chaîne en utilisant Perl?
- 12. Comment déterminer si la chaîne contient une sous-chaîne spécifique dans les X premiers caractères
- 13. Comment séparer une chaîne le long d'un séparateur de chaîne fourni par l'utilisateur en Perl?
- 14. Comment créer une classe dynamique en C# 4?
- 15. Quelle est la méthode canonique pour couper une chaîne dans Ruby sans créer une nouvelle chaîne?
- 16. Comment voir si une sous-chaîne existe dans une autre chaîne dans Java 1.4?
- 17. C# Comment vérifier si une date qui est actuellement une chaîne est aujourd'hui?
- 18. Comment déterminer si une chaîne est JSON valide?
- 19. Comment tester si une chaîne existe dans un flux Genshi?
- 20. Comment déterminer si une chaîne contient des métacaractères regex? (C#)
- 21. Comment vérifier si une chaîne contient http: // au début
- 22. Comment vérifier si une chaîne est vide dans Emacs Lisp?
- 23. Vérifie si une chaîne contient un astérisque (*)
- 24. vérifier si une chaîne est un double
- 25. Comment puis-je savoir si une image TIFF est au format CCITT T.6 (Groupe 4)?
- 26. Comment puis-je convertir une chaîne en une expression régulière qui lui correspond dans Perl?
- 27. Couper les 4 derniers caractères de la chaîne?
- 28. Comment créer une classe Perl?
- 29. Comment vérifier si un module Perl est installé?
- 30. Vérifiez si une chaîne est codée en UTF-8
Perl 4? Sérieusement? Perl 5 est sorti depuis près de 15 ans - depuis le 17 octobre 1994, pour être précis. Vous êtes connecté à une machine qui n'a pas été mise à niveau depuis si longtemps? Je suggère de vérifier à nouveau. – Tanktalus
Il existe des machines qui viennent avec Perl 4. Vous n'avez pas à l'aimer, mais c'est vrai. –