Notez que votre instruction return
est problématique: Les deux tableaux seront aplatis en un et le code appelant ne sera pas en mesure d'affecter les valeurs de retour à deux tableaux séparés. Si vous souhaitez conserver l'esprit de cette interface, vous devez renvoyer des références à ces tableaux. Voir perldoc perlsub
:
Une déclaration return
peut être utilisé pour sortir d'un sous-programme, en précisant le cas échéant la valeur renvoyée, qui sera évalué dans le contexte approprié (liste, scalaire ou vide) en fonction du contexte de l'appel de sous-programme . ... Si vous retournez un ou plusieurs agrégats (tableaux et hachages), ceux-ci seront aplatis ensemble dans une grande liste indiscernable.
En utilisant split
parce que l'ordinateur je tape ceci sur n'a ni Text::CSV
ni Text::xSV
].
#!/usr/bin/perl
use strict; use warnings;
my (@header) = map { chomp; split /,/} scalar <DATA>;
while (my $line = <DATA>) {
last unless $line =~ /\S/;
chomp $line;
my (@values) = split /,/, $line;
print "<select>\n";
for (my $i = 1; $i < @header; $i += 1) {
printf qq{<option name="%s" value="%s">%s = %s</option>\n},
$header[$i], $values[$i], $header[$i], $values[$i];
}
print "</select>\n";
}
__DATA__
Time,h1,h2,h3
00:00:00,n1,n2,n3
Maintenant, si je fais quelque chose comme ça, je séparer la partie où je lis les données et où je générer le <SELECT></SELECT>
et utiliser une approche basée sur le modèle de celui-ci. Voici un exemple:
#!/usr/bin/perl
use strict; use warnings;
use HTML::Template;
use List::AllUtils qw(each_arrayref);
my $select_html = <<EO_HTML;
<select>
<TMPL_LOOP OPTIONS>
<option name="<TMPL_VAR HEADER>"
value="<TMPL_VAR VALUE>"><TMPL_VAR HEADER> = <TMPL_VAR VALUE></option>
</TMPL_LOOP>
</select>
EO_HTML
my @headers = qw(h1 h2 h3);
# Stand-in for rows you read from the CSV file
my @values = ([qw(a1 a2 a3)], [qw(b1 b2 b3)]);
print make_select(\$select_html, \@headers, $_)->output for @values;
sub make_select {
my ($html, $headers, $values) = @_;
my $tmpl = HTML::Template->new(scalarref => $html);
my @options;
my $it = each_arrayref($headers, $values);
while (my ($h, $v) = $it->()) {
push @options, { HEADER => $h, VALUE => $v };
}
$tmpl->param(OPTIONS => \@options);
return $tmpl;
}
Sortie:
<select>
<option name="h1"
value="a1">h1 = a1</option>
<option name="h2"
value="a2">h2 = a2</option>
<option name="h3"
value="a3">h3 = a3</option>
</select>
<select>
<option name="h1"
value="b1">h1 = b1</option>
<option name="h2"
value="b2">h2 = b2</option>
<option name="h3"
value="b3">h3 = b3</option>
</select>
Que utilisez le temps que vous pour? – DVK
Je dois utiliser l'heure pour d'autres choses dans les différentes pages de ce site. – Space
Pouvez-vous nettoyer un peu la grammaire de votre dernier paragraphe? Ce n'est pas clair ce que vous demandez. Voulez-vous un menu déroulant, ou plusieurs, et ce qui devrait être dans eux? Quels problèmes avez-vous avec les générer? –