j'ai un script qui utilise use IO:ipe;use IO::Select; pour communiquer
entre plusieurs processus (Un pere et les fils)
Le pere distribue a chaque fils l'adresse d'un tableau [ex :
ARRAY(0x8153600)]
La communication se fait via des PIPE. La seul chose que puisse
transmettre le pere au fils est une chaine de caractere. Ainsi, il
transmet l'adresse du tableau à traiter sous forme de string. J'obtient
une erreur sur le type :
Can't use string ("0x8153600") as an ARRAY ref while "strict refs" in ...
Est-il possible de forcer la conversion de type de string vers reference.
J'ai joint un morceau de code simplifié qui rejoue l'erreur :
#!/usr/bin/perl
use strict;
my @tab = ("dimanche", "95874", "mercredi", "15");
my $ref = \@tab;
sub run {
my $reftab = shift;
my @tab = @$reftab;
print @$reftab, "\n";
}
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
Paul Gaborit
À (at) Tue, 09 Oct 2007 12:13:45 +0200, c-note écrivait (wrote):
j'ai un script qui utilise use IO:ipe;use IO::Select; pour communiquer entre plusieurs processus (Un pere et les fils)
J'imagine que c'est IO::Pipe... ;-) ~
Le pere distribue a chaque fils l'adresse d'un tableau [ex : ARRAY(0x8153600)] La communication se fait via des PIPE. La seul chose que puisse transmettre le pere au fils est une chaine de caractere. Ainsi, il transmet l'adresse du tableau à traiter sous forme de string. J'obtient une erreur sur le type :
Can't use string ("0x8153600") as an ARRAY ref while "strict refs" in ...
Est-il possible de forcer la conversion de type de string vers reference.
La stringification (la conversion en chaîne de carcatères) d'un tableau n'a aucune utilité pour Perl. C'est une simple aide pour le programmeur. En tous cas, Perl ne peut plus rien en faire.
De plus, les processus ne partagent pas le même espace mémoire et donc, même en supposant que Perl sache quoi faire de cette adresse, le second processus ne trouverait certainement pas à cette adresse le contenu que le premier processus y a stocké.
Deux solutions (au choix selon le besoin) :
- Utiliser un segment de mémoire partagé (via le module IPC::Shareable par exemple).
- Utiliser le module Storable pour sérialiser les données (le contenu du tableau) pour envoi comme une suite d'octets puis désérialiser à l'autre bout.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
À (at) Tue, 09 Oct 2007 12:13:45 +0200,
c-note <c-note@hotmail.fr> écrivait (wrote):
j'ai un script qui utilise use IO:ipe;use IO::Select; pour communiquer
entre plusieurs processus (Un pere et les fils)
J'imagine que c'est IO::Pipe... ;-)
~
Le pere distribue a chaque fils l'adresse d'un tableau [ex :
ARRAY(0x8153600)]
La communication se fait via des PIPE. La seul chose que puisse
transmettre le pere au fils est une chaine de caractere. Ainsi, il
transmet l'adresse du tableau à traiter sous forme de string.
J'obtient une erreur sur le type :
Can't use string ("0x8153600") as an ARRAY ref while "strict refs" in ...
Est-il possible de forcer la conversion de type de string vers reference.
La stringification (la conversion en chaîne de carcatères) d'un
tableau n'a aucune utilité pour Perl. C'est une simple aide pour le
programmeur. En tous cas, Perl ne peut plus rien en faire.
De plus, les processus ne partagent pas le même espace mémoire et
donc, même en supposant que Perl sache quoi faire de cette adresse, le
second processus ne trouverait certainement pas à cette adresse le
contenu que le premier processus y a stocké.
Deux solutions (au choix selon le besoin) :
- Utiliser un segment de mémoire partagé (via le module IPC::Shareable
par exemple).
- Utiliser le module Storable pour sérialiser les données (le contenu
du tableau) pour envoi comme une suite d'octets puis désérialiser à
l'autre bout.
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) Tue, 09 Oct 2007 12:13:45 +0200, c-note écrivait (wrote):
j'ai un script qui utilise use IO:ipe;use IO::Select; pour communiquer entre plusieurs processus (Un pere et les fils)
J'imagine que c'est IO::Pipe... ;-) ~
Le pere distribue a chaque fils l'adresse d'un tableau [ex : ARRAY(0x8153600)] La communication se fait via des PIPE. La seul chose que puisse transmettre le pere au fils est une chaine de caractere. Ainsi, il transmet l'adresse du tableau à traiter sous forme de string. J'obtient une erreur sur le type :
Can't use string ("0x8153600") as an ARRAY ref while "strict refs" in ...
Est-il possible de forcer la conversion de type de string vers reference.
La stringification (la conversion en chaîne de carcatères) d'un tableau n'a aucune utilité pour Perl. C'est une simple aide pour le programmeur. En tous cas, Perl ne peut plus rien en faire.
De plus, les processus ne partagent pas le même espace mémoire et donc, même en supposant que Perl sache quoi faire de cette adresse, le second processus ne trouverait certainement pas à cette adresse le contenu que le premier processus y a stocké.
Deux solutions (au choix selon le besoin) :
- Utiliser un segment de mémoire partagé (via le module IPC::Shareable par exemple).
- Utiliser le module Storable pour sérialiser les données (le contenu du tableau) pour envoi comme une suite d'octets puis désérialiser à l'autre bout.
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
c-note
À (at) Tue, 09 Oct 2007 12:13:45 +0200, c-note écrivait (wrote):
j'ai un script qui utilise use IO:ipe;use IO::Select; pour communiquer entre plusieurs processus (Un pere et les fils)
J'imagine que c'est IO::Pipe... ;-) ~
Le pere distribue a chaque fils l'adresse d'un tableau [ex : ARRAY(0x8153600)] La communication se fait via des PIPE. La seul chose que puisse transmettre le pere au fils est une chaine de caractere. Ainsi, il transmet l'adresse du tableau à traiter sous forme de string. J'obtient une erreur sur le type :
Can't use string ("0x8153600") as an ARRAY ref while "strict refs" in ...
Est-il possible de forcer la conversion de type de string vers reference.
La stringification (la conversion en chaîne de carcatères) d'un tableau n'a aucune utilité pour Perl. C'est une simple aide pour le programmeur. En tous cas, Perl ne peut plus rien en faire.
De plus, les processus ne partagent pas le même espace mémoire et donc, même en supposant que Perl sache quoi faire de cette adresse, le second processus ne trouverait certainement pas à cette adresse le contenu que le premier processus y a stocké.
Deux solutions (au choix selon le besoin) :
- Utiliser un segment de mémoire partagé (via le module IPC::Shareable par exemple).
- Utiliser le module Storable pour sérialiser les données (le contenu du tableau) pour envoi comme une suite d'octets puis désérialiser à l'autre bout.
je vais tester la serialisation des données.
Merci
À (at) Tue, 09 Oct 2007 12:13:45 +0200,
c-note <c-note@hotmail.fr> écrivait (wrote):
j'ai un script qui utilise use IO:ipe;use IO::Select; pour communiquer
entre plusieurs processus (Un pere et les fils)
J'imagine que c'est IO::Pipe... ;-)
~
Le pere distribue a chaque fils l'adresse d'un tableau [ex :
ARRAY(0x8153600)]
La communication se fait via des PIPE. La seul chose que puisse
transmettre le pere au fils est une chaine de caractere. Ainsi, il
transmet l'adresse du tableau à traiter sous forme de string.
J'obtient une erreur sur le type :
Can't use string ("0x8153600") as an ARRAY ref while "strict refs" in ...
Est-il possible de forcer la conversion de type de string vers reference.
La stringification (la conversion en chaîne de carcatères) d'un
tableau n'a aucune utilité pour Perl. C'est une simple aide pour le
programmeur. En tous cas, Perl ne peut plus rien en faire.
De plus, les processus ne partagent pas le même espace mémoire et
donc, même en supposant que Perl sache quoi faire de cette adresse, le
second processus ne trouverait certainement pas à cette adresse le
contenu que le premier processus y a stocké.
Deux solutions (au choix selon le besoin) :
- Utiliser un segment de mémoire partagé (via le module IPC::Shareable
par exemple).
- Utiliser le module Storable pour sérialiser les données (le contenu
du tableau) pour envoi comme une suite d'octets puis désérialiser à
l'autre bout.
À (at) Tue, 09 Oct 2007 12:13:45 +0200, c-note écrivait (wrote):
j'ai un script qui utilise use IO:ipe;use IO::Select; pour communiquer entre plusieurs processus (Un pere et les fils)
J'imagine que c'est IO::Pipe... ;-) ~
Le pere distribue a chaque fils l'adresse d'un tableau [ex : ARRAY(0x8153600)] La communication se fait via des PIPE. La seul chose que puisse transmettre le pere au fils est une chaine de caractere. Ainsi, il transmet l'adresse du tableau à traiter sous forme de string. J'obtient une erreur sur le type :
Can't use string ("0x8153600") as an ARRAY ref while "strict refs" in ...
Est-il possible de forcer la conversion de type de string vers reference.
La stringification (la conversion en chaîne de carcatères) d'un tableau n'a aucune utilité pour Perl. C'est une simple aide pour le programmeur. En tous cas, Perl ne peut plus rien en faire.
De plus, les processus ne partagent pas le même espace mémoire et donc, même en supposant que Perl sache quoi faire de cette adresse, le second processus ne trouverait certainement pas à cette adresse le contenu que le premier processus y a stocké.
Deux solutions (au choix selon le besoin) :
- Utiliser un segment de mémoire partagé (via le module IPC::Shareable par exemple).
- Utiliser le module Storable pour sérialiser les données (le contenu du tableau) pour envoi comme une suite d'octets puis désérialiser à l'autre bout.