管理与程序设计指南

Perl 语言环境

Perl 语言环境能够解释在 Net.Data 宏的一个 FUNCTION 块中指定的在线 Perl 脚本, 或者它能处理存储在服务器上单独文件中的外部 Perl 脚本。

配置 Perl 语言环境

验证 Net.Data 初始化文件中有以下配置语句,并且是在一行上:

ENVIRONMENT (DTW_PERL)     DTWPERL   ( OUT RETURN_CODE )
 

参见环境配置语句,以进一步了解 Net.Data 初始化文件和语言环境 ENVIRONMENT 语句。
日文用户:日文 SJIS 字符集的某些字符可能会被 Perl 错误地解释成控制字符。 有一个名为 jperl 的开放源代码程序包可解决此问题。下载并安装该程序包, 然后在 Perl 脚本的标题中包括语句use I18N::Japanese.pm

调用外部的 Perl 脚本

对外部 Perl 脚本的调用在 FUNCTION 块中是由一个 EXEC 语句来标识的:

%EXEC{ perl_script_name [optional parameters] %}
必需: 请确保 Perl 脚本名称 perl_script_name 列在 Net.Data 初始化文件中为 EXEC_PATH 配置变量 指定的路径中。
 %FUNCTION(DTW_PERL) perl1() {
 %EXEC{MyPerl.pl %}
 %}

传递参数

有两种方式将信息传递到 Perl (DTW_PERL) 语言环境调用的程序,直接和间接。

直接
在调用 Perl 脚本时直接传递参数。例如:

%DEFINE INPARM1 = "SWITCH1"
 
%FUNCTION(DTW_PERL) sys1() {
 %EXEC{
    MyPerl.pl $(INPARM1) "literal string"
 %}
%}

Net.Data 变量 INPARM1 被引用并被传递到 Perl 脚本。参数传递到 Perl 脚本的方式与从命令行 调用 Perl 脚本时参数传递到 Perl 脚本的方式相同。 使用这种方式传递给 Perl 脚本的参数被认为是输入类型参数(传递给 Perl 脚本的参数可以由 Perl 脚本 使用和处理,但对参数的更改并反映给 Net.Data)。

间接

使用以下一种方法在调用 Perl 脚本时直接传递参数:

以下示例显示了 Net.Data 如何从一个宏传递变量。

%FUNCTION(DTW_PERL) today() RETURNS(result) {
  $date = `date`;
  chop $date;
  open(DTW, "> $ENV{DTWPIPE}") || die "Could not open: $!";
  print DTW "result = \"$date\"\n";
%}
%HTML(INPUT) {
  @today()
%}

如果 Perl 脚本位于一个名为 today.pl 的外部文件中,那么这个函数可以按下一个 示例来编写:

%FUNCTION(DTW_PERL) today() RETURNS(result) {
  %EXEC { today.pl %}
%}

可以 Net.Data 表格传递给由 Perl 语言环境调用的 Perl 脚本。Perl 脚本 根据 Net.Data 宏表格参数的 Net.Data 名称来访问它们的值。列标题和字段值都包含在用表格名和 列号标识的变量中。例如,在表格 myTable 中,列标题是 myTable_N_j, 字段值是 myTable_V_i_j,其中 i 是行号, j 是列号。表格的行数与列数是 myTable_ROWSmyTable_COLS

FUNCTION 块中的 REPORT 和 MESSAGE 块

REPORT 和 MESSAGE 块在所有 FUNCTION 部分都是允许的。 它们由 Net.Data 来处理,而不是由 语言环境来处理。当然,Perl 脚本可以将文本写至标准输出流,作为 Web 页面的一部分。

Perl 语言环境示例

以下示例显示了 Net.Data 如何通过执行外部的 Perl 脚本来生成一个表格:

%define {
 c = %TABLE(20)
 rows = "5"
 columns = "5" %}
 %function(DTW_PERL) genTable(in rows, in columns, out table) {
 %exec{ perl.pl
 %}
 
 %message{
 default: "genTable: Unexpected Error"
 %}
 %}
 
%HTML(REPORT){
 @genTable(rows, columns, c)
 return code is $(RETURN_CODE)
 %}
 The Perl script (perl.pl):
 
 open(D2W,"> $ENV{DTWPIPE}");
 print "genTable begins ...
 
 ";
 $r = $ENV{ROWS};
 $c = $ENV{COLUMNS};
 print D2W "table_ROWS=\"$r\" ";
 print D2W "table_COLS=\"$c\" ";
 print "rows: $r
 ";
 print "columns: $c";
 for ($j=1; $j<=$c; $j++)
 {
 print D2W "table_N_$j=\"COL$j\" ";
 }
 for ($i=1; $i<=$r; $i++)
 {
 for ($j=1; $j<=$c; $j++)
 {
 print D2W "table_V_$i","_","$j=\"" $i $j "\" ";
 }
 }
 close(D2W); 

结果:genTable 生成:

rows: 5 columns: 5
  COL1  |  COL2   |  COL3   |  COL4   |  COL5   |
--------------------------------------------------
[ 1 1 ] | [ 1 2 ] | [ 1 3 ] | [ 1 4 ] | [ 1 5 ] |
--------------------------------------------------
[ 2 1 ] | [ 2 2 ] | [ 2 3 ] | [ 2 4 ] | [ 2 5 ] |
--------------------------------------------------
[ 3 1 ] | [ 3 2 ] | [ 3 3 ] | [ 3 4 ] | [ 3 5 ] |
--------------------------------------------------
[ 4 1 ] | [ 4 2 ] | [ 4 3 ] | [ 4 4 ] | [ 4 5 ] |
--------------------------------------------------
[ 5 1 ] | [ 5 2 ] | [ 5 3 ] | [ 5 4 ] | [ 5 5 ] |
--------------------------------------------------
return code is 0  


[ 页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]