內容

名稱

XS::APItest - 測試 perl C API

語法

use XS::APItest;
print_double(4);

use XS::APItest qw(rpn calcrpn);
$triangle = rpn($n $n 1 + * 2 /);
calcrpn $triangle { $n $n 1 + * 2 / }

摘要

此模組測試 perl C API。也公開 perl 內部各種位元給核心測試腳本使用。

說明

此模組可用於檢查 perl C API 是否運作正常。此模組提供測試函式和相關聯的測試腳本,用於驗證輸出。

此模組不應安裝。

匯出

匯出所有測試函式

測試 printf 是否正確格式化雙精度浮點數。

print_double( $val );

輸出傳送至 STDOUT。

測試 printf 是否正確格式化 long double。不接受引數 - 測試值已寫入函式中(為「7」)。

print_long_double();

輸出傳送至 STDOUT。

have_long_double

判斷 Perl 是否支援 long double。這應可用於判斷是否測試 print_long_double

print_long_double() if have_long_double;

測試 printf 是否正確格式化 NV

print_nv( $val );

輸出傳送至 STDOUT。

測試 printf 是否正確格式化 IV

print_iv( $val );

輸出傳送至 STDOUT。

測試 printf 是否正確格式化 UV

print_uv( $val );

輸出傳送至 STDOUT。

測試 printf 是否正確格式化 int

print_int( $val );

輸出傳送至 STDOUT。

測試 printf 是否正確格式化 long

print_long( $val );

輸出傳送至 STDOUT。

測試 printf 是否正確格式化單精度浮點數。

print_float( $val );

輸出傳送至 STDOUT。

filter

安裝來源篩選器,將「o」替換為「e」(不論它可能修改什麼)。

call_sv, call_pv, call_method

這些執行同名的 C 呼叫。flags 引數之後的所有內容都會傳遞為呼叫函式的引數。它們會傳回 C 函式本身推入堆疊中的任何內容,加上函式的傳回值;例如

call_sv( sub { @_, 'c' }, G_LIST,  'a', 'b');
# returns 'a', 'b', 'c', 3
call_sv( sub { @_ },      G_SCALAR, 'a', 'b');
# returns 'b', 1
eval_sv

評估傳遞的 SV。結果處理與 call_sv() 等相同。

eval_pv

在純量內容中執行同名的 C 函式。傳回 C 函式傳回的相同 SV。

require_pv

執行同名的 C 函式。不傳回任何內容。

KEYWORDS

這些預設未提供,但必須明確匯入。它們是詞彙範圍。

DEFSV

行為類似於 $_

rpn(EXPRESSION)

此建構是一個 Perl 表達式。EXPRESSION 必須是一個 RPN 算術表達式,如下所述。RPN 表達式會進行評估,並且其值會做為 Perl 表達式的值傳回。

calcrpn VARIABLE { EXPRESSION }

此建構是一個完整的 Perl 陳述式。(閉合大括號後不應接分號。)VARIABLE 必須是一個 Perl 標量 my 變數,而 EXPRESSION 必須是一個 RPN 算術表達式,如下所述。RPN 表達式會進行評估,並且其值會指派給變數。

RPN 表達式語法

RPN 表達式的符號可以用空白分隔,但通常不需要這種分隔。只有在未分隔的符號看起來像較長的符號時才需要分隔。例如,12 34 + 可以寫成 12 34+,但不能寫成 1234 +

RPN 表達式可以是下列任一項

1234

一連串數字是一個未簽署的十進位文字數字。

$foo

一個字母數字名稱前面加上美元符號表示一個 Perl 標量變數。只有使用 mystate 宣告的變數才受支援。如果變數值不是原生整數,它會在評估時使用 Perl 的一般機制轉換為整數。

A B +

AB 的總和。

A B -

AB 的差,從 A 減去 B 的結果。

A B *

AB 的乘積。

A B /

A 除以 B 的商,四捨五入為最接近的整數。除以零會產生例外狀況。

A B %

A 除以 B 的餘數,商四捨五入為最接近的整數。除以零會產生例外狀況。

由於算術運算子都具有固定的元數並且是後置的,因此不需要運算子優先順序,也不需要群組運算子來覆寫優先順序。這是 RPN 的重點之一。

RPN 表達式也可以用另一種方式來詮釋,也就是將其視為對堆疊進行一系列運算,每個符號一個運算。文字或變數符號會將值推入堆疊。二元運算子會從堆疊中拉出兩個項目,對它們執行計算,然後將結果推回堆疊。堆疊一開始是空的,而在表達式結束時,堆疊中必須只有一個值。

另請參閱

XS::Typemapperlapi

作者

Tim Jenness, <t.jenness@jach.hawaii.edu>、Christian Soeller, <csoelle@mph.auckland.ac.nz>、Hugo van der Sanden <hv@crypt.compulink.co.uk>、Andrew Main (Zefram) <zefram@fysh.org>

著作權和授權

著作權所有 (C) 2002,2004 Tim Jenness、Christian Soeller、Hugo van der Sanden。保留所有權利。

版權所有 (C) 2009 Andrew Main (Zefram) <zefram@fysh.org>

此函式庫為自由軟體;您可以在與 Perl 相同的條款下重新散布或修改它。