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

时间:2016-04-24 11:22:17

标签: perl

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

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

3 个答案:

答案 0 :(得分:6)

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

sort

=运算符的操作码名称为sassign。 (当操作码的名称与运算符的名称不同时,这显然是最有用的;例如,标量赋值运算符foo的操作码是PP(pp_foo) { // implementation } 。)< / p>

操作码在Perl源目录顶层的各种.c文件中实现。操作码grep pp_sort /path/to/perl/source/*.c 的定义通常如下所示:

sort

所以:

keys

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

*有一些例外。例如,#define Perl_pp_keys Perl_do_kv 操作码实际上是在pp_foo中实现的,如opcode.h中的这一行所示:

JTable

如果找不到给定操作码的try{ Document document = new Document(); PdfWriter.getInstance(document,new FileOutputStream("transcript.pdf")); document.open(); document.add(new Paragraph("UNIVERSITY OF MAIDUGURI")); document.add(new Paragraph("=======================================================================")); PdfPTable table1 = new PdfPTable(partITable.getColumnCount()); PdfPTable table2 = new PdfPTable(partITable2.getColumnCount()); table1.setSpacingAfter(10); table1.setSpacingBefore(5); for(int i=0;i<partITable.getColumnCount();i++){ table1.addCell(partITable.getColumnName(i)); } for(int rows=0;rows<partITable.getRowCount()-1;rows++){ for(int cols=0;cols<partITable.getColumnCount();cols++){ table1.addCell(partITable.getModel().getValueAt(rows,cols).toString()); } } for(int i=0;i<partITable2.getColumnCount();i++){ table2.addCell(partITable2.getColumnName(i)); } for(int rows=0;rows<partITable2.getRowCount()-1;rows++){ for(int cols=0;cols<partITable2.getColumnCount();cols++){ table2.addCell(partITable2.getModel().getValueAt(rows,cols).toString()); } } document.add(table1); document.add(table2); document.close(); } catch(Exception e){ JOptionPane.showMessageDialog(null, e); } ,请检查opcode.h。

答案 1 :(得分:4)

如果您正在计划修改Perl的内部,那么您需要了解Perl如何在内部工作的大量内容。首先阅读aN*base**N联机帮助页,然后按照指针查看其他几个(相当长的!)手册页。

答案 2 :(得分:3)

我去了https://github.com/Perl/perl5/search?q=sort

第一次搜索热门是sort.pm,看起来像是一个很好的提示。由于该模块没有定义搜索本身,我在那里寻找可以帮助我的关键字。我选择了_quicksort_mergesort

https://github.com/Perl/perl5/search?q=_quicksort未显示任何相关结果,因此我只尝试quicksort

那给了我pp_sort.c,你去了。差不多有2000行完整的排序。