Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème de fin de ligne sans

2 réponses
Avatar
Thierry
Bonsoir,J'ai un script basé en gros sur celui-ci:#!/usr/bin/perl
use strict;use warnings;
use IO::Socket;

my $socket = IO::Socket::INET->new(Proto => "tcp",
PeerAddr => "10.0.0.5",
PeerPort => 10000);

print "*** Debut de connexion ***\n";
while(my $reponse=<$socket>){
print "Le serveur a dit : $reponse";
print $socket "Au revoir SERVEUR!!!\n";
}
print "*** Fin de connexion ***\n";
il se connecte au serveur d'un système distant qui lui renvoi des infos sous
forme de lignes ASCII.Mon problème est que ces lignes ne sont pas terminées
par un <CR><LF>, mais juste par un <CR>.Le script ne "voit" donc pas les
fins de ligne.Quelqu'un aurait-il une idée pour remédier à ce problème avant
que je sois obligé de modifier le système distant pour qu'il insert un <LF>
après chaque <CR> ?Merci.PS: Le client est sur une machine sous Linux.

2 réponses

Avatar
Stephane CHAZELAS
2010-04-6, 23:55(+02), Thierry:
Bonsoir,J'ai un script basé en gros sur celui-ci:#!/usr/bin/perl
use strict;use warnings;
use IO::Socket;

my $socket = IO::Socket::INET->new(Proto => "tcp",
PeerAddr => "10.0.0.5",
PeerPort => 10000);

print "*** Debut de connexion ***n";
while(my $reponse=<$socket>){
print "Le serveur a dit : $reponse";
print $socket "Au revoir SERVEUR!!!n";
}
print "*** Fin de connexion ***n";
il se connecte au serveur d'un système distant qui lui renvoi des infos sous
forme de lignes ASCII.Mon problème est que ces lignes ne sont pas terminées
par un <CR><LF>, mais juste par un <CR>.Le script ne "voit" donc pas les
fins de ligne.Quelqu'un aurait-il une idée pour remédier à ce problème avant
que je sois obligé de modifier le système distant pour qu'il insert un <LF>
après chaque <CR> ?Merci.PS: Le client est sur une machine sous Linux.



$/ = "r";

voir perldoc perlvar

--
Stéphane
Avatar
Paul Gaborit
À (at) Wed, 7 Apr 2010 16:31:35 +0000 (UTC),
Stephane CHAZELAS écrivait (wrote):

2010-04-6, 23:55(+02), Thierry:
Bonsoir,J'ai un script basé en gros sur celui-ci:#!/usr/bin/perl
use strict;use warnings;
use IO::Socket;

my $socket = IO::Socket::INET->new(Proto => "tcp",
PeerAddr => "10.0.0.5",
PeerPort => 10000);

print "*** Debut de connexion ***n";
while(my $reponse=<$socket>){
print "Le serveur a dit : $reponse";
print $socket "Au revoir SERVEUR!!!n";
}
print "*** Fin de connexion ***n";
il se connecte au serveur d'un système distant qui lui renvoi des infos sous
forme de lignes ASCII.Mon problème est que ces lignes ne sont pas terminées
par un <CR><LF>, mais juste par un <CR>.Le script ne "voit" donc pas les
fins de ligne.Quelqu'un aurait-il une idée pour remédier à ce problème avant
que je sois obligé de modifier le système distant pour qu'il insert un <LF>
après chaque <CR> ?Merci.PS: Le client est sur une machine sous Linux.



$/ = "r";

voir perldoc perlvar



Oui.

Pour éviter d'utiliser la variable $/, on peut passer par la couche IO :

$socket->input_record_separator("r");

Ainsi, seul le comportement de $socket est influencé. Sinon, il faut
penser à 'local'iser la variable $/ pour éviter les effets de bord...

--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>