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
及其结果被添加到集合中,并且将来对 addsym() 的任何调用指定相同的 $name
都将返回相同的结果,无论指定 $maxlen
的值如何。除非 $silent
为 true,否则如果必须修剪或更改 $name
以避免与现有符号名称冲突,则会输出警告。$maxlen
和 $silent
默认为创建此符号集时指定的值。此方法必须通过现有对象调用。
从 $name
创建一个符号名称,长度为 $maxlen
或更少字符,并返回它。如果 $name
太长,它首先尝试通过删除重复字符来缩短它,然后通过定期删除非下划线字符,最后,如果需要,通过定期删除任何类型的字符来缩短它。$maxlen
的默认值为 31。除非 $silent
为真,否则如果 $name
以任何方式被更改,将输出一个警告。此函数可以作为静态方法或通过现有对象调用,但在后一种情况下,不会进行检查以确保结果名称在符号集中是唯一的。如果已指示编译器通过 $Config{'useshortenedsymbols'}
执行自己的符号缩短,则 $maxlen
的值假定为 2048,作为绕过此模块所做的缩短的一种方式。
从符号集中删除 $name
,其中 $name
是先前传递给 addsym() 的原始符号名称。如果 $name
存在于符号集中,则返回其“修剪”的等效项,否则返回 undef
。此方法必须通过现有对象调用。
返回原始名称,该名称已通过对 addsym() 的先前调用修剪为 $trimmed
,或者如果 $trimmed
不对应于此符号集的成员,则返回 undef
。此方法必须通过现有对象调用。
返回通过对 addsym() 的先前调用从 $name
生成的修剪名称,或者如果 $name
不是此符号集的成员,则返回 undef
。此方法必须通过现有对象调用。
返回一个包含此集合中所有原始符号名称的列表。
返回一个包含此集合中所有修剪符号名称的列表。
Charles Bailey <[email protected]>
最后修订于 2010 年 10 月 8 日,适用于 Perl 5.13.6。