2016-04-24 2 views

答えて

6

あなたはBを使用してコードによって生成されたオペコードを見つけることができます::簡潔に:

$ 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 

sortオペレータのオペコードの名前はsortです。 (これは、オペコードの名前がオペレータの名前と同じでない場合は、明らかに最も有用です;例えば、スカラ代入演算子=のオペコードはsassignです)。

オペコードはさまざまです。 cファイルをPerlソースディレクトリの最上位に配置します。 pp_sort.csortオペコードは実際に独自のファイルに住んで、この場合は

grep pp_sort /path/to/perl/source/*.c 

:オペコードfooの定義は、通常*次のようになります。だから、

PP(pp_foo) { 
    // implementation 
} 


※いくつかの例外があります。 opcode.hにこのラインで示されるように、例えばkeysオペコードは実際に、Perl_do_kvに実装されています。

#define Perl_pp_keys Perl_do_kv 

あなたは所与のオペコードのためpp_fooを見つけることができない場合は、opcode.hに確認してください。

+1

*ソートする方法を男に教えてください、彼らは自分自身を分類するでしょう - 外令* – reinierpost

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行の並べ替えでいっぱいです。

4

Perlの内部構造を変更する予定がある場合は、Perlが内部的にどのように動作するかについてかなりの量を知る必要があります。まず、perlhackのマンページを読んで、いくつかの(かなり長い!)マニュアルページへのポインタに従ってください。

+0

ありがとうございます!見てみましょう。 – coderodde

関連する問題