Perl 語言環境可解譯 Net.Data 巨集的 FUNCTION 區塊中指定的列入 Perl script, 或可以處理伺服器上個別檔案中所儲存的 Perl script。
請驗證下列架構陳述式是否在 Net.Data 起始設定檔案中,且位在同一行上:
ENVIRONMENT (DTW_PERL) DTWPERL ( OUT RETURN_CODE )
請參閱環境架構陳述式,以瞭解 Net.Data 起始設定檔案及語言環境 ENVIRONMENT 陳述式。
日文版使用者: | 日語 SJIS 字元中的部份字元,可能會被 Perl 誤解為控制字元。 一個名為 jperl 的開放原始碼資料包可以解決此問題。請下載並安裝此資料包,然後將陳述式 use I18N::Japanese.pm 併入 Perl Script 的標頭中。 |
EXEC 陳述式會使用下列語法,在 FUNCTION 區塊中識別外部 Perl script 的呼叫:
%EXEC{ perl_script_name [optional parameters] %}
必要的:確定 perl_script_name (Perl script 名稱) 列示在針對 Net.Data 起始設定檔案中的 EXEC_PATH 架構變數所指定的路徑中。
%FUNCTION(DTW_PERL) perl1() { %EXEC{MyPerl.pl %} %}
有兩種方式可將資訊傳遞給 Perl (DTW_PERL) 語言環境所呼叫的程式:直接與間接。
%DEFINE INPARM1 = "SWITCH1" %FUNCTION(DTW_PERL) sys1() { %EXEC{ MyPerl.pl $(INPARM1) "literal string" %} %}
Net.Data 變數 INPARM1 將被參照並傳遞到 Perl script。 參數傳遞到 Perl script 的方式,將與從指令行中呼叫 Perl script 時參數傳遞到 Perl script 的方式相同。使用這種方法傳遞給 Perl script 的參數被視為輸入類型參數 (Perl script 可使用及操作已傳遞到 Perl script 的參數,但對參數所做的變更不會向 Net.Data 反映)。
使用下列其中一種方法,直接將呼叫上的參數傳遞到 Perl script。
name="value"
對於多個資料項目,請以換行或空白字元分隔每一個項目。
如果變數名稱同於輸出參數名稱,且使用上述語法, 則新值將置換現行值。如果變數名稱沒有對應到輸出參數, 則 Net.Data 將不會處理它。
下列範例將顯示 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 script 是在名為 today.pl 的外部檔中, 則可在下一範例中撰寫相同的函數:
%FUNCTION(DTW_PERL) today() RETURNS(result) { %EXEC { today.pl %} %}
您可以將 Net.Data 表格傳遞到 Perl 語言環境所呼叫的 Perl script。 Perl script 會依據它們的 Net.Data 名稱來存取 Net.Data 巨集表格參數的值。 直欄標題與欄位值包含在以表格名稱與直欄號碼識別的變數中。 例如, 在 myTable 中,直欄標題為 myTable_N_j, 而欄位值為 myTable_V_i_j,其中 i 是橫列號碼,j 為直欄號碼 表格的橫列與直欄數目為 myTable_ROWS 與 myTable_COLS。
在任何 FUNCTION 區段中均容許 REPORT 及 MESSAGE 區塊。 它們是透過 Net.Data 來處理,而不是透過語言環境來處理。不過, Perl script 可將文字寫入到將併入為 Web 網頁一部份的標準輸出串流。
下列範例將顯示 Net.Data 如何經由執行外部 Perl script 來建立表格:
%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