J'ai un éventail d'états dans le format que je veux formaté comme: p> Ceci est principalement pour que je Peut plus facilement en boucle à l'aide du module HTML :: Modules ( https://metacpan.org/ POD / HTML :: Modèle # TMPL_LOOP ) P> Je suis assez nouveau à Perl, alors inconscient de la manière de faire ce genre d'action et de ne pas trouver quelque chose de similaire. P > p>
5 Réponses :
sauf si vous avez besoin de garder ce hachage autour d'une utilisation ultérieure, je pense que simplement boucler à travers les éléments deux à la fois serait plus simple. Vous pouvez accomplir facilement ce type de bouclage avec épissure code>
:
my @states = ('AL','Alabama','AK','Alaska','AR','Arkansas'...); my @state_hashes = (); while (my ($code, $name) = splice(@states, 0, 2)) { push @state_hashes, { $code => $name }; } # do w/e you want with @state_hashes
use List::Util 1.29; @state_hashes = List::Util::pairmap { +{ $a => $b } } @states;
Ou liste d'utilisation :: util 1.29 qw (pairmap); @state_hashes = paireMap {+ {$ a => $ b}} @states; code>. Vous pouvez toujours importer lors de la spécification d'une version.
@ikegami Je ne suis pas un grand fan d'importation
Assez juste, mais d'autres sont. (J'aime importer, mais j'aime bien énumérer exactement ce que j'importe plutôt que d'importer les valeurs par défaut comme vous l'avez fait)
Bundle_by de la liste :: Utilsby peut facilement créer ce format:
use strict; use warnings; use List::UtilsBy 'bundle_by'; my @states = ('AL', 'Alabama', 'AK', 'Alaska', 'AR', 'Arkansas', ... ); my @hashes = bundle_by { +{@_} } 2, @states;
mappe code> Solution avec quelques objets PERLISH
my @states = ('AL','Alabama','AK','Alaska','AR','Arkansas','VT','Vermont');
my %states;
map { $states{$states[$_]} = $states[$_+1] unless $_%2 } 0..$#states;
Ce qui suit ne serait-il pas plus logique pour HTML :: Modèle? Cela vous permettrait d'utiliser le modèle suivant: P> use List::Util 1.29 qw( pairmap );
{
my %escapes = (
'&' => '&',
'<' => '<',
'>' => '>',
'"' => '"',
"'" => ''',
);
sub text_to_html(_) { $_[0] =~ s/([&<>"'])/$escapes{$1}/rg }
}
states => [ pairmap { +{ id_html => $a, name_html => $b } } map text_to_html, @states ]
Pourquoi utilisez-vous la version dans Liste d'utilisation :: util 1.29 qw (pairmap); code>? Sans version
Liste d'utilisation :: util qw (pairmap); code> sur la liste :: util avant 1.29 le code avec l'échec
"pairmap" n'est pas exporté par la liste :: Module UTIL CODE> .
1) Le message d'erreur est meilleur parce qu'il dit comment résoudre le problème. 2) Je ne mettez pas vraiment la version dans l'instruction code> code>; Je l'place dans makefile.pl/build.pl. Cela communique au lecteur quelle version placer dans makefile.pl/build.pl.