【问题标题】:How to print hash values using perl CGI如何使用 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 循环。尝试拆分打印语句而不是

标签: perl cgi


【解决方案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 />

【讨论】:

    猜你喜欢
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 2012-10-23
    • 1970-01-01
    • 2022-07-18
    • 2013-06-24
    相关资源
    最近更新 更多