Discussion:
Problème de fin de ligne sans <LF>
(trop ancien pour répondre)
Thierry
2010-04-06 21:55:03 UTC
Permalink
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.
Stephane CHAZELAS
2010-04-07 16:31:35 UTC
Permalink
Post by 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
Paul Gaborit
2010-04-07 17:08:22 UTC
Permalink
À (at) Wed, 7 Apr 2010 16:31:35 +0000 (UTC),
Post by Stephane CHAZELAS
Post by 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/>
Thierry
2010-04-07 21:19:54 UTC
Permalink
Post by Paul Gaborit
À (at) Wed, 7 Apr 2010 16:31:35 +0000 (UTC),
Post by Stephane CHAZELAS
Post by 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.
$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/>
Merci à tous les deux, c'est bien ce qu'il me faut, ça marche nickel.
Loading...