ExtUtils::XSSymSet - 保持 VMS 連結器可接受的符號名稱集合
use ExtUtils::XSSymSet;
$set = new ExtUtils::XSSymSet;
while ($sym = make_symbol()) { $set->addsym($sym); }
foreach $safesym ($set->all_trimmed) {
print "Processing $safesym (derived from ",
$self->get_orig($safesym), ")\n";
do_stuff($safesym);
}
$safesym = ExtUtils::XSSymSet->trimsym($onesym);
由於 VMS 連結器僅根據符號名稱的前 31 個字元來區分符號,因此有時需要縮短符號名稱以避免衝突。(這對於 xsubpp 產生的名稱尤其如此,因為巢狀套件名稱產生的字首可能會變得很長。)ExtUtils::XSSymSet
提供函式以一致的方式縮短名稱,並追蹤一組名稱以確保每個名稱都是唯一的。雖然此函式是針對 xsubpp 設計,但它可以用於任何字串組。
此套件提供以下函式,所有函式都應作為方法呼叫。
建立一個空的 ExtUtils::XSSymset
符號組。此函式可以作為靜態方法或透過現有物件呼叫。如果指定 $maxlen
或 $silent
,則它們將用作透過此物件呼叫 addsym() 或 trimsym() 的最大名稱長度和警告行為預設值。如果已指示編譯器透過 $Config{'useshortenedsymbols'}
進行自己的符號縮短,則假設 $maxlen
的值為 2048,作為繞過此模組所做的縮短的一種方式。
使用 trimsym() 中所述的方法,從 $name
建立一個符號名稱,在這一組符號中是唯一的,並傳回新的名稱。$name
和其結果會加入到這一組中,且未來任何指定相同 $name
的 addsym() 呼叫,都會傳回相同的結果,不論指定的 $maxlen
值為何。除非 $silent
為 true,否則如果 $name
必須修剪或變更以避免與現有的符號名稱發生衝突,就會輸出警告。$maxlen
和 $silent
預設為在建立這一組符號時指定的數值。此方法必須透過現有的物件呼叫。
從 $name
建立一個符號名稱,長度為 $maxlen
個字元或更少,並傳回。如果 $name
太長,它會先嘗試透過移除重複字元來縮短它,然後定期移除非底線字元,最後,如果需要,定期移除任何類型的字元。$maxlen
預設為 31。除非 $silent
為 true,否則如果 $name
以任何方式變更,就會輸出警告。此函數可以作為靜態方法或透過現有的物件呼叫,但在後者的情況下,不會進行檢查以確保結果名稱在符號組中是唯一的。如果已指示編譯器透過 $Config{'useshortenedsymbols'}
執行自己的符號縮短,則假設 $maxlen
的值為 2048,作為繞過此模組所做的縮短的一種方式。
從符號組中移除 $name
,其中 $name
是先前傳遞給 addsym() 的原始符號名稱。如果 $name
存在於符號組中,則傳回其「修剪」的等效值,否則傳回 undef
。此方法必須透過現有的物件呼叫。
傳回原始名稱,該名稱已透過先前呼叫 addsym() 修剪為 $trimmed
,或者如果 $trimmed
不對應於此符號組的成員,則傳回 undef
。此方法必須透過現有的物件呼叫。
傳回透過先前呼叫 addsym() 從 $name
產生的修剪名稱,或者如果 $name
不是此符號組的成員,則傳回 undef
。此方法必須透過現有的物件呼叫。
傳回一個清單,其中包含此集合中所有原始符號名稱。
傳回一個清單,其中包含此集合中所有已修剪符號名稱。
Charles Bailey <bailey@newman.upenn.edu>
最後於 2010-10-08 修訂,適用於 Perl 5.13.6。