Je construis une petite bibliothèque qui transforme les données de journal en un fichier de type CSV qui peut être importé par un tableur. Pour la sortie, je suis intéressé par une option pour afficher des légendes conviviales pour les colonnes de la table si nécessaire. Cela devrait être une option pour que l'outil puisse également être utilisé avec un minimum d'effort. Je suis venu avec un tableau pour la spécification de colonne qui contient des scalaires simples pour les clés ou des références de hachage avec une paire de clé et de valeur. J'y accède via des clés et des valeurs qui me paraissent un peu étranges.accéder aux références de "paire de hachage" utilisées pour la spécification de colonne
Existe-t-il un moyen plus simple d'accéder à la clé et à la valeur d'un hachage contenant uniquement une paire?
(j'ai essayé de simplifier le code autant que possible.)
#!/usr/bin/perl -w
use strict;
use warnings;
# some sample data
my @rows = (
{x => 1, y => 2},
{y => 5, z => 6},
{x => 7, z => 9},
);
sub print_table {
my @columns = @_; # columns of interest with optional header replacement
my @keys; # for accessing the data values
my @captions; # for display on column headers
for (@columns) {
if (ref($_) eq 'HASH') {
push @keys, keys %$_;
push @captions, values %$_;
} else {
push @keys, $_;
push @captions, $_;
}
}
print join ("\t", @captions), "\n";
for my $row (@rows) {
print join ("\t", (map {$row->{$_} // ''} @keys)), "\n";
}
}
print_table({x=>'u'}, 'y');
Quel est le problème avec '' keys' et values'? Votre code est déjà assez simple. – ThisSuitIsBlackNot
@ThisSuitIsBlackNot ... c'est ce que je pensais, mais parce que [push] (http://perldoc.perl.org/functions/push.html) ouvre un contexte de liste, j'ai trouvé cela ** trompeur ** en raison de l'intention caractère singleton des arguments. – Wolf
Rien de trompeur à ce sujet, vous pouvez «pousser» des scalaires simples aussi bien que des scalaires multiples: 'push @foo, $ bar'. Je pense que vous pensez trop. – ThisSuitIsBlackNot