如何使用 perl CGI 打印哈希值

Posted

技术标签:

【中文标题】如何使用 perl CGI 打印哈希值【英文标题】:How to print hash values using perl CGI 【发布时间】:2021-11-08 07:06:13 【问题描述】:

我是 perl CGI 的新手,正在尝试使用 perl CGI 将哈希数据打印到 html。下面是我的代码。

#!/usr/bin/perl

use strict;
use warnings;
use CGI ':standard';
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);

our %dashboard_data;
my $q = new CGI;

################################################################################
## Read the dashboard_data file
require "partition_tsv_dashboard.pl";

print   $q->header,
        $q->start_html('Top Level TSV Dashboards'),
        $q->h1('Top Level TSV Dashboards'),
foreach my $model (sort keys %$dashboard_data'project')
        $q->h2("Model: $model"),

        $q->end_html;

partition_tsv_dashboard.pl 是嵌套散列。包含以下数据。

#!/usr/bin/perl

$dashboard_data 'project' 'model1' 'P00' 'TSV-193' 'COMP_0_P00' = '';
$dashboard_data 'project' 'model2' 'P00' 'TSV-001' 'COMP_0_P00' = '';
$dashboard_data 'project' 'model3' 'P00' 'TSV-001' 'COMP_0_P00' = '';
$dashboard_data 'project' 'model4' 'P00' 'TSV-001' 'COMP_0_P00' = '';
$dashboard_data 'project' 'model5' 'P00' 'TSV-001' 'COMP_0_P00' = '';

1;

当我尝试执行 CGI 程序时出现以下错误。如何将哈希值映射到 CGI 对象?有人可以帮我解决这个问题吗?

输出。

Software error:
syntax error at /web/keystone/cgi-bin/tsv_dashboard.pl line 26, near "$model ("
Execution of /web/keystone/cgi-bin/tsv_dashboard.pl aborted due to compilation errors.

【问题讨论】:

我认为你不能在另一个列表中有一个 for 循环。尝试拆分打印语句而不是 【参考方案1】:

print 语句的参数列表中不能有 for 循环。而是尝试像这样拆分它。

print   $q->header,
        $q->start_html('Top Level TSV Dashboards'),
        $q->h1('Top Level TSV Dashboards');

foreach my $model (sort keys %$dashboard_data'project')
        print $q->h2("Model: $model");

print   $q->end_html;

【讨论】:

h2 行中的 HTML 注入错误 感谢您的评论。这将取决于脚本partition_tsv_dashboard.pl 的作用对吗?因为它负责填充%dashboard_data 哈希。如果脚本不使用用户输入来填充散列,那么据我所知,它不可能是 HTML 注入错误的来源.. 我发现%dashboard_data 不太可能包含 HTML 而不是纯文本。【参考方案2】:

@Håkon Hægland 的先前答案可能是最好的答案,但您可以使用 map 来获得类似的结果。

use CGI ':standard';

my $q = new CGI;

my @a = ("blah", "wooble");

print $q->h1("things"), "\n",
      (map  $q->h2($_)  @a), "\n",
      $q->br, "\n";

要得到这个输出:

% perl test.pl
<h1>things</h1>
<h2>blah</h2><h2>wooble</h2>
<br />

【讨论】:

以上是关于如何使用 perl CGI 打印哈希值的主要内容,如果未能解决你的问题,请参考以下文章

在 Perl 中如何使用变量作为哈希键?

如何在perl中删除哈希值中的重复值?

如何将数组作为值存储在 Perl 哈希中?

在 Perl 中按顺序打印哈希键

Perl如何访问作为另一个哈希值的数组元素的哈希?

如何在 Perl 哈希表中存储多个值?