Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
jl_morel
Dans l'article <3faf8407$0$225$, fr a dit...
J'ai constaté un blocage de mon script lorsque j'utilise binmode sur un gros fichier (>7Mo)
open(IN, $filename); binmode(IN); undef $/;
while (my $data = <IN>) {
my $uudata = pack 'u*', $data; print $socket $uudata;
}
close IN
j'ecris dans un socket ... est ce lié?
Quelqu'un a t'il une explication et une solution?
Si vous faites undef $/; vous êtes en mode "slurp". Votre boucle While ne sert à rien : elle n'est parcourue qu'une fois. Tout votre fichier se retrouve d'un coup dans $data, d'où un problème d'espace mémoire si le fichier est très gros.
Vous pouvez fixer la valeur max des enregistrements avec $/ Voir perlvar:
open(IN, $filename); binmode(IN); local $/ = (256*1_024); # lecture par paquets de 256 ko
while (my $data = <IN>) { my $uudata = pack 'u*', $data; print $socket $uudata; } close IN
-- J-L.M.
Dans l'article <3faf8407$0$225$636a55ce@news.free.fr>, ghislain.lambert@free.
fr a dit...
J'ai constaté un blocage de mon script lorsque j'utilise binmode sur un gros
fichier (>7Mo)
open(IN, $filename);
binmode(IN);
undef $/;
while (my $data = <IN>) {
my $uudata = pack 'u*', $data;
print $socket $uudata;
}
close IN
j'ecris dans un socket ... est ce lié?
Quelqu'un a t'il une explication et une solution?
Si vous faites undef $/; vous êtes en mode "slurp".
Votre boucle While ne sert à rien : elle n'est parcourue qu'une fois. Tout
votre fichier se retrouve d'un coup dans $data, d'où un problème d'espace
mémoire si le fichier est très gros.
Vous pouvez fixer la valeur max des enregistrements avec $/
Voir perlvar:
J'ai constaté un blocage de mon script lorsque j'utilise binmode sur un gros fichier (>7Mo)
open(IN, $filename); binmode(IN); undef $/;
while (my $data = <IN>) {
my $uudata = pack 'u*', $data; print $socket $uudata;
}
close IN
j'ecris dans un socket ... est ce lié?
Quelqu'un a t'il une explication et une solution?
Si vous faites undef $/; vous êtes en mode "slurp". Votre boucle While ne sert à rien : elle n'est parcourue qu'une fois. Tout votre fichier se retrouve d'un coup dans $data, d'où un problème d'espace mémoire si le fichier est très gros.
Vous pouvez fixer la valeur max des enregistrements avec $/ Voir perlvar:
open(IN, $filename); binmode(IN); local $/ = (256*1_024); # lecture par paquets de 256 ko
while (my $data = <IN>) { my $uudata = pack 'u*', $data; print $socket $uudata; } close IN
-- J-L.M.
Ghislain Lambert
merci pour votre reponse
effectivement tout se passe nettement mieux .
"Jean-Louis MOREL" a écrit dans le message de news:boonl9$20a$
Dans l'article <3faf8407$0$225$,
fr a dit...
J'ai constaté un blocage de mon script lorsque j'utilise binmode sur un gros
fichier (>7Mo)
open(IN, $filename); binmode(IN); undef $/;
while (my $data = <IN>) {
my $uudata = pack 'u*', $data; print $socket $uudata;
}
close IN
j'ecris dans un socket ... est ce lié?
Quelqu'un a t'il une explication et une solution?
Si vous faites undef $/; vous êtes en mode "slurp". Votre boucle While ne sert à rien : elle n'est parcourue qu'une fois. Tout votre fichier se retrouve d'un coup dans $data, d'où un problème d'espace mémoire si le fichier est très gros.
Vous pouvez fixer la valeur max des enregistrements avec $/ Voir perlvar:
open(IN, $filename); binmode(IN); local $/ = (256*1_024); # lecture par paquets de 256 ko
while (my $data = <IN>) { my $uudata = pack 'u*', $data; print $socket $uudata; } close IN
-- J-L.M.
merci pour votre reponse
effectivement tout se passe nettement mieux .
"Jean-Louis MOREL" <jl_morel@bribes.org> a écrit dans le message de
news:boonl9$20a$1@news-reader3.wanadoo.fr...
Dans l'article <3faf8407$0$225$636a55ce@news.free.fr>,
ghislain.lambert@free.
fr a dit...
J'ai constaté un blocage de mon script lorsque j'utilise binmode sur un
gros
fichier (>7Mo)
open(IN, $filename);
binmode(IN);
undef $/;
while (my $data = <IN>) {
my $uudata = pack 'u*', $data;
print $socket $uudata;
}
close IN
j'ecris dans un socket ... est ce lié?
Quelqu'un a t'il une explication et une solution?
Si vous faites undef $/; vous êtes en mode "slurp".
Votre boucle While ne sert à rien : elle n'est parcourue qu'une fois. Tout
votre fichier se retrouve d'un coup dans $data, d'où un problème d'espace
mémoire si le fichier est très gros.
Vous pouvez fixer la valeur max des enregistrements avec $/
Voir perlvar:
"Jean-Louis MOREL" a écrit dans le message de news:boonl9$20a$
Dans l'article <3faf8407$0$225$,
fr a dit...
J'ai constaté un blocage de mon script lorsque j'utilise binmode sur un gros
fichier (>7Mo)
open(IN, $filename); binmode(IN); undef $/;
while (my $data = <IN>) {
my $uudata = pack 'u*', $data; print $socket $uudata;
}
close IN
j'ecris dans un socket ... est ce lié?
Quelqu'un a t'il une explication et une solution?
Si vous faites undef $/; vous êtes en mode "slurp". Votre boucle While ne sert à rien : elle n'est parcourue qu'une fois. Tout votre fichier se retrouve d'un coup dans $data, d'où un problème d'espace mémoire si le fichier est très gros.
Vous pouvez fixer la valeur max des enregistrements avec $/ Voir perlvar: