目錄

名稱

ExtUtils::Constant - 產生 XS 程式碼來匯入 C 標頭常數

語法

use ExtUtils::Constant qw (WriteConstants);
WriteConstants(
    NAME => 'Foo',
    NAMES => [qw(FOO BAR BAZ)],
);
# Generates wrapper code to make the values of the constants FOO BAR BAZ
#  available to perl

說明

ExtUtils::Constant 促進產生 C 和 XS 封裝程式碼,讓 perl 模組可以 AUTOLOAD 在 C 函式庫標頭檔中定義的常數。它主要由 h2xs 工具程式使用,而此程式碼就是基於該工具程式。它不包含用於掃描標頭檔以擷取這些常數的常式。

用法

通常只需要呼叫 WriteConstants 函式,然後

#include "const-c.inc"

Foo.xs 的 C 區段

INCLUDE: const-xs.inc

Foo.xs 的 XS 區段。

若要更具彈性,請使用 constant_types()C_constantXS_constantWriteConstants 就是使用這些函式實作的。

目前此模組了解下列類型。h2xs 可能只知道其中一部分。數字類型的長度會在編譯時由 Configure 指令碼選取。

IV

有號整數,至少 32 位元。

UV

無號整數,長度與 IV 相同

NV

浮點數類型,可能是 double,也可能是 long double

PV

以 NUL 結束的字串,長度將以 strlen 判定

PVN

固定長度的東西,以 [指標,長度] 對提供。如果您在編譯時知道字串的長度,可以使用這個取代 PV

SV

一個 mortal SV。

YES

真。(PL_sv_yes)不需要這個值(而且會忽略)。

NO

定義為假。(PL_sv_no)不需要這個值(而且會忽略)。

UNDEF

undef。不需要巨集的值。

FUNCTIONS

constant_types

一個傳回單一純量的函式,其中有 #define 定義,用於在產生的 C 和 XS 函式之間內部使用的常數。

XS_constant PACKAGE, TYPES, XS_SUBNAME, C_SUBNAME

一個函式,用於產生 XS 程式碼來實作 perl 子常式 PACKAGE::constant,由 PACKAGE::AUTOLOAD 用於載入常數。這個 XS 程式碼是一個包裝器,包裝在通常由 C_constant 產生、通常命名為 constant 的 C 子常式周圍。

TYPES 應該提供為 C 子常式 constant 會產生的類型清單(以逗號分隔),或提供為雜湊的參考。它應該是與傳給 C_constant 相同的類型清單。[否則 XS_constantC_constant 可能對於傳遞給 C 函式 constant 的參數數量有不同的想法]

如果您提供參數 XS_SUBNAME,您可以將 perl 可見的子常式呼叫為 constant 以外的其他名稱。它呼叫的 C 子常式預設為 perl 可見子常式的名稱,除非您提供參數 C_SUBNAME

autoload PACKAGE, VERSION, AUTOLOADER

一個函式,用於產生模組 PACKAGE 的 AUTOLOAD 子常式,VERSION 是程式碼應該向後相容的 perl 版本。它預設為執行子常式的 perl 版本。如果 AUTOLOADER 為 true,AUTOLOAD 子常式會對 constant() 常式無法辨識的所有名稱回退至 AutoLoader::AUTOLOAD。

WriteMakefileSnippet

WriteMakefileSnippet 屬性 => 值 [, ...]

一個函數,用於產生 Makefile.PL 的 perl 程式碼,以便重新產生常數子程式。參數的命名方式與傳遞給 WriteConstants 的相同,另外新增 INDENT,用於指定前導空格的數量(預設為 2)。

目前僅識別 INDENTNAMEDEFAULT_TYPENAMESC_FILEXS_FILE

WriteConstants 屬性 => 值 [, ...]

寫入一個 C 程式碼檔案和一個 XS 程式碼檔案,您應該分別在模組 XS 程式碼的 C 和 XS 區段中 #includeINCLUDE。您可能想要在 Makefile.PL 中執行此操作,以便您可以在不觸及模組其他部分的情況下輕鬆編輯常數清單。支援的屬性如下

NAME

模組名稱。這必須指定

DEFAULT_TYPE

常數的預設類型。如果未指定,則假設為 IV

BREAKOUT_AT

常數名稱依長度分組。為每個組產生子程式,其中包含此數量或更多名稱。

NAMES

一個常數名稱陣列,其中包含常數名稱的純量,或如 "C_constant" 中所述的雜湊。

PROXYSUBS

如果為真,則使用代理子程式。請參閱 ExtUtils::Constant::ProxySubs

C_FH

一個檔案句柄,用於寫入 C 程式碼。如果未給定,則開啟 C_FILE 以供寫入。

C_FILE

要寫入的檔案名稱,其中包含 C 程式碼。預設為 const-c.inc。名稱中的 - 可確保檔案不會被誤認為與合法的 perl 套件名稱相關的任何內容,而未將檔案命名為 .c 可避免覆寫 Makefile.PL 的 .xs.c 規則。

XS_FH

一個檔案句柄,用於寫入 XS 程式碼。如果未給定,則開啟 XS_FILE 以供寫入。

XS_FILE

要寫入的檔案名稱,其中包含 XS 程式碼。預設為 const-xs.inc

XS_SUBNAME

將會回傳常數的 XS 子程式的 perl 可見名稱。預設為 constant

C_SUBNAME

產生用來傳回常數的 C 子例程名稱。預設為 XS_SUBNAME。子例程有 _ 和附加的名稱長度,因此名稱有 10 個字元的常數會在 constant_10 中,預設為 XS_SUBNAME

AUTHOR

Nicholas Clark <nick@ccl4.org>,根據 Larry Wall 和其他人在 h2xs 中的程式碼