我不太了解您的数据结构和代码。
这可以$hash{$kayA}{$keyB}{val=>$value};
编译,但在 Perl 中没有实际意义。
另外,这条线有问题:
$TabPrt = $TabPrt. "<tr> <td><input name='myButton' type= "radio" id ="R1"></td><td $Row></td>";
它不会编译,因为字符串"<tr> <td><input name='myButton' type= "
在radio
. 我想你的意思是
$TabPrt .= q(<tr><td><input name="myButton" type="radio" id ="R1"></td><td>$Row</td>);
使用q()
or qq()
(内插)引号运算符来引用包含'
or"
字符的字符串。
我假设您希望您的表格呈现为
+----------------------------------+------------------------+---------+
| Col A | Col B | Value |
+==========+=======================+========================+=========+
| o Button | this is the first key | this is the second key | Value 1 |
| | +------------------------+---------+
| | | this is the second key | Value 2 |
+----------+-----------------------+------------------------+---------+
现在让我们假设你的哈希看起来像
my %hash = (
key1 => { A => "val1", B => "val2" },
key2 => { C => "val1", D => "val2" },
);
然后我们可以遍历这个哈希并构造 HTML:
sub make_table_corpus {
my ($hash) = @_;
my $html = "";
for my $key (sort keys %$hash) {
my $sub_hash = $hash->{$key};
# first: how many rows will this key span?
my $rowspan = keys %$sub_hash;
# then: prepare all the secondary keys. Will return HTML fragments:
my @secondary = prep_secondary_keys($sub_hash);
$html .= html("tr", {},
html("td", {rowspan => $rowspan}, " o Button "),
html("td", {rowspan => $rowspan}, $key),
# put the first secondary key here
shift @secondary,
);
# append the other secondary keys:
$html .= html("tr", {}, $_) for @secondary;
}
return $html;
}
# emits html fragments of key-value pairs, as <td> cells.
sub prep_secondary_keys {
my ($hash) = @_;
map { html("td", {}, $_) . html("td", {}, $hash->{$_}) }
sort keys %$hash;
}
# creates a html fragment
sub html {
my ($name, $attr, @childs) = @_;
my $attrstring = "";
while (my ($attname, $value) = each %$attr) {
$value =~ s/"/"/g;
$attrstring .= qq( $attname="$value");
}
return join "", qq(<$name$attrstring>), @childs, qq(</$name>);
}
然后:
print make_table_corpus(\%hash);
使用上面的哈希,这将产生类似的输出
<tr>
<td rowspan="2"> o Button </td>
<td rowspan="2">key1</td>
<td>A</td>
<td>val1</td>
</tr>
<tr>
<td>B</td>
<td>val2</td>
</tr>
<tr>
<td rowspan="2"> o Button </td>
<td rowspan="2">key2</td>
<td>C</td>
<td>val1</td>
</tr>
<tr>
<td>D</td>
<td>val2</td>
</tr>
(当然是无意的)
我做的不一样
- 我没有犯语法错误(
use strict; use warnings
收到有关错误和错误的警告)
- 辅助密钥由外部子程序处理。这样,我们就可以简单地将第一个 HTML 片段放入第一行。
- 我编写了
html
sub 以避免在我的源代码中出现过多的引用问题。虽然这不能替代模板系统,但它让生活变得更轻松,并为错误引入了单点故障,这使得问题更容易解决。
扩展解决方案以打印出表格标题并生成有效的 HTML 表格是从这里开始的简单步骤。