J'ai un petit probl=E8me avec les typeglobs que je suis en train de
d=E9couvrir :
J'ai essay=E9 le tout d=E9but de l'exemple de mon bouquin :
#!/usr/bin/env perl
use strict;
foreach my $nomsym(sort keys %main::) {
local *sym =3D $main::{$nomsym};
print "\$$nomsym is defined\n" if defined $sym
}
Qui me retourne une erreur :
Variable "$sym" is not imported at alias.pl line 10.
Global symbol "$sym" requires explicit package name at alias.pl line
10.
Execution of alias.pl aborted due to compilation errors.
Auriez-vous une suggestion sur ce blocage d=E8s le d=E9but :) ?
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) 28 Sep 2006 08:42:47 -0700, "ctobini" écrivait (wrote):
J'ai un petit problème avec les typeglobs que je suis en train de découvrir :
J'ai essayé le tout début de l'exemple de mon bouquin :
#!/usr/bin/env perl
use strict;
foreach my $nomsym(sort keys %main::) { local *sym = $main::{$nomsym}; print "$$nomsym is definedn" if defined $sym }
Qui me retourne une erreur :
Variable "$sym" is not imported at alias.pl line 10. Global symbol "$sym" requires explicit package name at alias.pl line 10. Execution of alias.pl aborted due to compilation errors.
Auriez-vous une suggestion sur ce blocage dès le début :) ?
Ajoutez une déclaration pour $sym ! Une ligne du genre :
our $sym;
Juste après 'use strict;' (c'est lui la "cause" de votre problème mias heureusement puisqu'il est justement fait pour cela).
Lorsqu'on accède aux entrailles de la bête... heu... de Perl, les mécanismes de protection automagique peuvent devenir génant.
PS: de quel bouquin sortez-vous cet exemple ?
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
J'ai un petit problème avec les typeglobs que je suis en train de
découvrir :
J'ai essayé le tout début de l'exemple de mon bouquin :
#!/usr/bin/env perl
use strict;
foreach my $nomsym(sort keys %main::) {
local *sym = $main::{$nomsym};
print "$$nomsym is definedn" if defined $sym
}
Qui me retourne une erreur :
Variable "$sym" is not imported at alias.pl line 10.
Global symbol "$sym" requires explicit package name at alias.pl line
10.
Execution of alias.pl aborted due to compilation errors.
Auriez-vous une suggestion sur ce blocage dès le début :) ?
Ajoutez une déclaration pour $sym ! Une ligne du genre :
our $sym;
Juste après 'use strict;' (c'est lui la "cause" de votre problème mias
heureusement puisqu'il est justement fait pour cela).
Lorsqu'on accède aux entrailles de la bête... heu... de Perl, les
mécanismes de protection automagique peuvent devenir génant.
PS: de quel bouquin sortez-vous cet exemple ?
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 28 Sep 2006 08:42:47 -0700, "ctobini" écrivait (wrote):
J'ai un petit problème avec les typeglobs que je suis en train de découvrir :
J'ai essayé le tout début de l'exemple de mon bouquin :
#!/usr/bin/env perl
use strict;
foreach my $nomsym(sort keys %main::) { local *sym = $main::{$nomsym}; print "$$nomsym is definedn" if defined $sym }
Qui me retourne une erreur :
Variable "$sym" is not imported at alias.pl line 10. Global symbol "$sym" requires explicit package name at alias.pl line 10. Execution of alias.pl aborted due to compilation errors.
Auriez-vous une suggestion sur ce blocage dès le début :) ?
Ajoutez une déclaration pour $sym ! Une ligne du genre :
our $sym;
Juste après 'use strict;' (c'est lui la "cause" de votre problème mias heureusement puisqu'il est justement fait pour cela).
Lorsqu'on accède aux entrailles de la bête... heu... de Perl, les mécanismes de protection automagique peuvent devenir génant.
PS: de quel bouquin sortez-vous cet exemple ?
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
ctobini
Bonjour et merci de votre réponse,
Ajoutez une déclaration pour $sym ! Une ligne du genre après use stri ct :
our $sym;
C'est parfait, ça marche très bien !
Il y a cependant une chose que je ne comprend pas :
Si our $sym est déclarée en tant que variable (déclarée '$') du paquetage et que fonction (local *sym) lui attribue une valeur propre à la fonction, toujours selon le livre, comment attribuer un alias du style :
*sym = *var
Afin que $sym = $var ou @sym = @var...
C. Tobini
Bonjour et merci de votre réponse,
Ajoutez une déclaration pour $sym ! Une ligne du genre après use stri ct :
our $sym;
C'est parfait, ça marche très bien !
Il y a cependant une chose que je ne comprend pas :
Si our $sym est déclarée en tant que variable (déclarée '$') du
paquetage et que fonction (local *sym) lui attribue une valeur propre
à la fonction, toujours selon le livre, comment attribuer un alias du
style :
Ajoutez une déclaration pour $sym ! Une ligne du genre après use stri ct :
our $sym;
C'est parfait, ça marche très bien !
Il y a cependant une chose que je ne comprend pas :
Si our $sym est déclarée en tant que variable (déclarée '$') du paquetage et que fonction (local *sym) lui attribue une valeur propre à la fonction, toujours selon le livre, comment attribuer un alias du style :
*sym = *var
Afin que $sym = $var ou @sym = @var...
C. Tobini
Paul Gaborit
À (at) 29 Sep 2006 05:12:51 -0700, "ctobini" écrivait (wrote):
Il y a cependant une chose que je ne comprend pas :
Si our $sym est déclarée en tant que variable (déclarée '$') du paquetage
Cette déclaration ne touche absolument pas aux valeurs. Elle ne fait qu'informer le compilateur que le nom 'sym' est acceptable en tant que variable scalaire (pour le paquetage courant). Si vous n'utilisez ni 'use strict' ni 'use warnings', les déclarations 'our' n'ont aucune influence (ce n'est pas le cas de 'my').
et que fonction (local *sym) lui attribue une valeur propre à la fonction, toujours selon le livre, comment attribuer un alias du style :
*sym = *var
Afin que $sym = $var ou @sym = @var...
Là, on touche aux valeurs. Ou, dans le cas de l'alias, au lien qui est fait entre un nom et ses différents types de valeurs.
Vous ajoutez en plus la notion de 'local'isation (temporelle) des valeurs ce qui ne simplifient pas la compréhension.
Toutes ces notions sont complètement orthogonales...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Il y a cependant une chose que je ne comprend pas :
Si our $sym est déclarée en tant que variable (déclarée '$') du
paquetage
Cette déclaration ne touche absolument pas aux valeurs. Elle ne fait
qu'informer le compilateur que le nom 'sym' est acceptable en tant que
variable scalaire (pour le paquetage courant). Si vous n'utilisez ni
'use strict' ni 'use warnings', les déclarations 'our' n'ont aucune
influence (ce n'est pas le cas de 'my').
et que fonction (local *sym) lui attribue une valeur propre
à la fonction, toujours selon le livre, comment attribuer un alias du
style :
*sym = *var
Afin que $sym = $var ou @sym = @var...
Là, on touche aux valeurs. Ou, dans le cas de l'alias, au lien qui est
fait entre un nom et ses différents types de valeurs.
Vous ajoutez en plus la notion de 'local'isation (temporelle) des
valeurs ce qui ne simplifient pas la compréhension.
Toutes ces notions sont complètement orthogonales...
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
À (at) 29 Sep 2006 05:12:51 -0700, "ctobini" écrivait (wrote):
Il y a cependant une chose que je ne comprend pas :
Si our $sym est déclarée en tant que variable (déclarée '$') du paquetage
Cette déclaration ne touche absolument pas aux valeurs. Elle ne fait qu'informer le compilateur que le nom 'sym' est acceptable en tant que variable scalaire (pour le paquetage courant). Si vous n'utilisez ni 'use strict' ni 'use warnings', les déclarations 'our' n'ont aucune influence (ce n'est pas le cas de 'my').
et que fonction (local *sym) lui attribue une valeur propre à la fonction, toujours selon le livre, comment attribuer un alias du style :
*sym = *var
Afin que $sym = $var ou @sym = @var...
Là, on touche aux valeurs. Ou, dans le cas de l'alias, au lien qui est fait entre un nom et ses différents types de valeurs.
Vous ajoutez en plus la notion de 'local'isation (temporelle) des valeurs ce qui ne simplifient pas la compréhension.
Toutes ces notions sont complètement orthogonales...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
ctobini
Bonjour,
J'ai fait plusieurs tests, c'est plus clair, sauf pour les attributions *this = *that, il faudra que je creuse un peu plus.
Merci en tout cas pour votre aide.
J'ai oublié de vous répondre pour la provenance de ces exemples, c'est tiré de l'ouvrage 'Programmation en Perl' O'Reilly (3ème Ed., p.67).
Bonne journée,
C. Tobini
--------------------------
À (at) 29 Sep 2006 05:12:51 -0700, "ctobini" écrivait (wrote):
Il y a cependant une chose que je ne comprend pas :
Si our $sym est déclarée en tant que variable (déclarée '$') du paquetage
Cette déclaration ne touche absolument pas aux valeurs. Elle ne fait qu'informer le compilateur que le nom 'sym' est acceptable en tant que variable scalaire (pour le paquetage courant). Si vous n'utilisez ni 'use strict' ni 'use warnings', les déclarations 'our' n'ont aucune influence (ce n'est pas le cas de 'my').
et que fonction (local *sym) lui attribue une valeur propre à la fonction, toujours selon le livre, comment attribuer un alias du style :
*sym = *var
Afin que $sym = $var ou @sym = @var...
Là, on touche aux valeurs. Ou, dans le cas de l'alias, au lien qui est fait entre un nom et ses différents types de valeurs.
Vous ajoutez en plus la notion de 'local'isation (temporelle) des valeurs ce qui ne simplifient pas la compréhension.
Toutes ces notions sont complètement orthogonales...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>
Bonjour,
J'ai fait plusieurs tests, c'est plus clair, sauf pour les attributions
*this = *that, il faudra que je creuse un peu plus.
Merci en tout cas pour votre aide.
J'ai oublié de vous répondre pour la provenance de ces exemples,
c'est tiré de l'ouvrage 'Programmation en Perl' O'Reilly (3ème Ed.,
p.67).
Il y a cependant une chose que je ne comprend pas :
Si our $sym est déclarée en tant que variable (déclarée '$') du
paquetage
Cette déclaration ne touche absolument pas aux valeurs. Elle ne fait
qu'informer le compilateur que le nom 'sym' est acceptable en tant que
variable scalaire (pour le paquetage courant). Si vous n'utilisez ni
'use strict' ni 'use warnings', les déclarations 'our' n'ont aucune
influence (ce n'est pas le cas de 'my').
et que fonction (local *sym) lui attribue une valeur propre
à la fonction, toujours selon le livre, comment attribuer un alias du
style :
*sym = *var
Afin que $sym = $var ou @sym = @var...
Là, on touche aux valeurs. Ou, dans le cas de l'alias, au lien qui est
fait entre un nom et ses différents types de valeurs.
Vous ajoutez en plus la notion de 'local'isation (temporelle) des
valeurs ce qui ne simplifient pas la compréhension.
Toutes ces notions sont complètement orthogonales...
--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>
J'ai fait plusieurs tests, c'est plus clair, sauf pour les attributions *this = *that, il faudra que je creuse un peu plus.
Merci en tout cas pour votre aide.
J'ai oublié de vous répondre pour la provenance de ces exemples, c'est tiré de l'ouvrage 'Programmation en Perl' O'Reilly (3ème Ed., p.67).
Bonne journée,
C. Tobini
--------------------------
À (at) 29 Sep 2006 05:12:51 -0700, "ctobini" écrivait (wrote):
Il y a cependant une chose que je ne comprend pas :
Si our $sym est déclarée en tant que variable (déclarée '$') du paquetage
Cette déclaration ne touche absolument pas aux valeurs. Elle ne fait qu'informer le compilateur que le nom 'sym' est acceptable en tant que variable scalaire (pour le paquetage courant). Si vous n'utilisez ni 'use strict' ni 'use warnings', les déclarations 'our' n'ont aucune influence (ce n'est pas le cas de 'my').
et que fonction (local *sym) lui attribue une valeur propre à la fonction, toujours selon le livre, comment attribuer un alias du style :
*sym = *var
Afin que $sym = $var ou @sym = @var...
Là, on touche aux valeurs. Ou, dans le cas de l'alias, au lien qui est fait entre un nom et ses différents types de valeurs.
Vous ajoutez en plus la notion de 'local'isation (temporelle) des valeurs ce qui ne simplifient pas la compréhension.
Toutes ces notions sont complètement orthogonales...
-- Paul Gaborit - <http://perso.enstimac.fr/~gaborit/> Perl en français - <http://perl.enstimac.fr/>