J'aime Data::Alias
. Il semble être cassé en 5.12. Peut-il être réparé? Sera-t-il réparé bientôt? Y a-t-il une bonne alternative?Comment puis-je obtenir un travail Data :: Alias en Perl 5.12?
Répondre
Toute version de Data::Alias
construite avant la version 1.08 (publiée le 22 octobre 2010 BST) ne fonctionnera pas avec Perl 5.12 car Data::Alias
avant que 1.08 soit interrompu dans Perl 5.12. Mettez à niveau vers la dernière version (1.08 ou plus récente) et cela devrait fonctionner! Comme une note intéressante, il semble que l'on puisse faire des alias à Perl en tant que fonctionnalité de langue dans le futur, avec le nettoyage de :=
no longer meaning an empty attribute list. Hâte d'y! :)
Je pensais que tout dans le CPAN était automatiquement testé par rapport aux candidats à la version 5.12? Il n'y avait peut-être pas de test unitaire qui couvrait ce cas dans la distribution, auquel cas le signalement du bogue garantira qu'il ne se casse plus jamais. :) – Ether
@Ether: à en juger par le fil sur RT ce n'est pas un bug; le code XS du module a été cassé par un changement aux internes. En ce qui concerne les tests de validation des candidats contre le CPAN, je ne sais pas, mais cela ne semble pas utile à moins que vous ayez fait une comparaison matricielle avec les résultats de la version précédente de perl sur la même plateforme. Beaucoup de modules sur CPAN ont des échecs, cela ne signifie pas que 5.12 les a cassés. :) –
rafl y a jeté un coup d'oeil il y a quelques semaines et a dit que ce ne serait pas trop dur à réparer (c'est "trop dur" pour rafl). Il est censé faire cela pour que Method :: Signatures puisse fonctionner en 5.12. – Schwern
Le module n'a pas été mis à jour depuis 2007 mais vous pouvez toujours envoyer un message à l'auteur (Matthijs van Duin: [email protected]) ou déposer un rapport de bug comme Robert l'a mentionné dans sa réponse.
Voici quelques alternatives:
En ce qui concerne les modules CPAN supplémentaires pour aliasing qui travaillent dans 5.12+:
- Variable::Alias - syntaxe propre
- Tie::Alias - une solution perl pur
- Lexical::Alias - syntaxe propre
- Devel::LexAlias - un peu plus bas niveau
et la recherche de « alias » sur CPAN tourne un peu plus, aucun ne semble fournir le « tout faire avec des alias dans cette déclaration » caractéristique de données :: Alias si . Donc, jusqu'à ce que
Data::Alias
soit fixé, vous pouvez utiliser l'une des méthodes Perl ci-dessus, ou les suivantes:Perl a pris en charge l'aliasing de toute variable aux variables qui existent dans la table de symboles. Cela se fait comme suit:
my $x = 1; our $y; # declare $y in the symbol table for the current package { local *y = \$x; # make $y an alias of $x in the current scope $y++; } print $x; # prints 2
Mais comme toujours, soyez conscient de ce que la portée dynamique/local fait réellement avant de l'utiliser.
On peut utiliser un scalaire lexical comme un alias dans le cadre d'une boucle for:
my $x = 1; for my $y ($x) { $y++; } print $x; # prints 2
ce type d'alias lexical peut même être passé hors de la boucle dans une fermeture en cas de besoin
vous pouvez créer des alias de tableau en utilisant la magie aliasing de Perl pour les listes d'arguments de sous-programme:
my $x = 1; my $alias = sub{\@_}->($x); # return a reference to its argument list, # which maintains its aliases $$alias[0]++; print $x; # prints 2
mais cela ne vous donne pas vraiment m fonctionnalité plus que des références, juste avec une syntaxe différente.
Et un exemple en utilisant les références de Perl:
my $x = 1; my $y = \$x; # take a reference to $x $$y++; # dereference $y print $x; # prints 2
Une référence n'est pas la même chose qu'un alias. Les exemples que vous montrez sont un sous-ensemble limité de ce que fait Data :: Alias. –
@brian d foy => l'exemple de référence est là pour montrer une alternative, les deux autres exemples sont le reste des techniques de Perl aliasing que je connais. ce sont bien sûr un sous-ensemble limité sinon Data :: Alias n'aurait probablement pas été écrit. l'OP a demandé des alternatives –
aussi, une référence est exactement la même chose qu'un alias, juste dans des vêtements différents. Pour alias quelque chose, vous placez une référence dans le slot approprié dans un type de variable glob. Quel que soit le sigil que vous utilisez avec l'étiquette de typeglob dit à Perl de le déréférencer, ainsi '$ y' se lit comme" un déréférencement scalaire du typeglob marqué y ". et il y a toujours la syntaxe '* foo {THING}' si vous voulez être bavard à ce sujet, dans ce cas '$ {* y {SCALAR}} ++;' –
Je viens de trouver une autre option possible: Scalar::Alias
, qui semble fonctionner en Perl 5.12. Évidemment, il ne fait qu'aliaser les scalaires, mais il ne nécessite pas une grosse virgule à la place d'un signe égal.
- 1. Comment comparer deux hachages en Perl sans utiliser Data :: Compare?
- 2. Strawberry Perl 5.12 en tant que plperl de PostgreSQL 9.0 sur win32?
- 3. Passer d'un travail C++ à un travail Perl/Unix
- 4. Obtenir un LINQ .InsertOnSubmit au travail
- 5. Comment Perl FIRSTKEY et le travail NEXTKEY
- 6. Comment obtenir des alias fonctionnant dans .gitconfig?
- 7. Perl stockage de données persistantes en utilisant Data :: Dumper
- 8. comment obtenir le travail jstree
- 9. Le DUND d'Android prend-il en charge DUN DT (alias Dial Up client alias Data Terminal aka "dund --connect")
- 10. Rubis équivalent de Perl Data :: Dumper
- 11. Comment obtenir les contenus des répertoires imbriqués en Perl
- 12. Comment concaténer des tableaux d'alias en Perl?
- 13. Créer un alias en utilisant mod_rewrite Apache
- 14. Obtenir par programme un alias de type dans .NET
- 15. alias dans un script
- 16. Comment obtenir un objet à partir d'un point de travail?
- 17. Comment créer un alias pour une classe générique en C#?
- 18. Comment obtenir build Maven GWT 2.0 travail
- 19. En utilisant les grammaires Regexp :: Perl de Perl, comment rendre une capture dépendante de $ MATCH?
- 20. Comment puis-je supprimer complètement un paquet en Perl?
- 21. Comment alias java.lang.Integer en utilisant XStream?
- 22. Comment définir un alias d'opérateur dans PostgreSQL?
- 23. Comment obtenir la sortie d'une commande externe en Perl?
- 24. Comment obtenir netbeans git de travail?
- 25. Comment écrire un alias pour grep -R?
- 26. Comment obtenir le chemin réel quel chemin alias
- 27. Obtenir jStorage au travail
- 28. Comment convertir une sortie Data :: Dumper en une structure de données Perl?
- 29. Comment obtenir la représentation hexadécimale de $ foo en Perl?
- 30. Comment obtenir la longueur d'une chaîne en Perl?
Ce problème est courant avec les modules XSub. –
D'après cela, il n'y aura pas de Data :: Alias dans Perl 5.12. https://bugzilla.redhat.com/show_bug.cgi?id=611014 –
Yay! Enfin mis à jour: http://cpansearch.perl.org/src/ZEFRAM/Data-Alias-1.08/Changes –