我想通过修改实际的排序例程来试验Perl。
我在源代码上grep
尝试找到一些名称模式提及 sort
的文件,但没有发现任何相关内容。
你们中的任何人都可以告诉排序实现所在的文件吗?
答案 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行完整的排序。