注 两个阵列将统一为一阵,呼吁书将无法将返回价值分配到两个不同的阵列。 如果你想要保持这一接口的精神,你就应当重新提及这些阵列。 见perldoc perlsub
:
<代码>return 说明可用于退出非例行声明,选择性地具体说明返还价值,将根据次路线呼吁的具体情况,在适当情况下加以评价(清单、标记或真空)。 ...... 如果您交还一个或一个以上的聚合物(斜体和斜体),这些混合物将合并成一个大的不可分清单。
采用<条码> 由于我打上这台电脑既没有Text:CSV
,也没有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>
";
for (my $i = 1; $i < @header; $i += 1) {
printf qq{<option name="%s" value="%s">%s = %s</option>
},
$header[$i], $values[$i], $header[$i], $values[$i];
}
print "</select>
";
}
__DATA__
Time,h1,h2,h3
00:00:00,n1,n2,n3
现在,如果我这样做的话,我会把我读到数据的那一部分分开,而我生成<代码><SlectT></SlectT>,并为后者使用基于模板的方法。 例如:
#!/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;
}
产出:
<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>