在Perl源代码中,我在哪里可以找到排序例程的实现?

cod*_*dde 1 perl

我想通过修改实际的排序例程来试验Perl.我grep在源头上试图找到一些提到名称模式的文件sort,但没有发现任何相关内容.

你们中的任何人都可以告诉排序实现所在的文件吗?

Thi*_*Not 6

您可以使用B :: Concise找出代码生成的操作码:

$ perl -MO=Concise -e'sort'
5  <@> leave[1 ref] vKP/REFC ->(end)
1     <0> enter ->2
2     <;> nextstate(main 1 -e:1) v:{ ->3
4     <@> sort vK ->5
3        <0> pushmark s ->4
-e syntax OK
Run Code Online (Sandbox Code Playgroud)

sort运营商的操作码名称是sort.(当操作码的名称与运算符的名称不同时,这显然是最有用的;例如,标量赋值运算符的操作码=sassign.)

操作码在Perl源目录顶层的各种.c文件中实现.操作码的定义foo通常*如下所示:

PP(pp_foo) {
    // implementation
}
Run Code Online (Sandbox Code Playgroud)

所以:

grep pp_sort /path/to/perl/source/*.c
Run Code Online (Sandbox Code Playgroud)

在这种情况下,sort操作码实际上存在于自己的文件中:pp_sort.c.


*有一些例外.例如,keys操作码实际上是Perl_do_kv在opcode.h中的这一行中实现的:

#define Perl_pp_keys Perl_do_kv
Run Code Online (Sandbox Code Playgroud)

如果找不到pp_foo给定的操作码,请检查opcode.h.