Bakit mahirap baguhin nang ligtas ang legacy na Perl
Siksik at flexible ang Perl code, at madalas isinulat ng mga taong ilang taon nang wala. Binabago ng mga sigil ang kahulugan ng isang pangalan, nagsisilbi ring class ang mga package, at iisang module ang nilo-load ng mga script sa maraming directory. Nahahanap ng text search ang mga string, pero hindi nito sinasabi sa agent kung aling subroutine talaga ang tinatawag ng isang script.
Ibinibigay ng Maguyva sa agent ang mga package, subroutine, import at constructor bilang structure, para ma-scope nito ang isang pagbabago bago hawakan ang code.
Ano ang kinukuha ng Maguyva mula sa Perl
Sakop ng Maguyva ang .pl, .pm, .t, .pod at .perl. Kinukuha ang mga subroutine bilang function at ang mga package declaration bilang class, at tinatanggal ang mga sigil ($, @, %, &, *) sa mga definition name, kaya mahahanap ang mga variable at subroutine gamit ang payak nilang pangalan.
Galing ang mga import sa mga use, require at package statement. Itinuturing na instantiation ang mga method call na may anyong Class->new, habang sadyang pinapanatili ang bless at tie sa call graph. Itinatala rin ng graph ang inheritance, override, type reference, read at write, at pag-raise ng exception.
Mga 189 built-in function (print, open, die, warn at mga katulad nito) ang nifi-filter mula sa mga call relationship, para lumitaw ang code ng repository.
Mga halimbawang agent prompt
- “Aling mga script ang gumagamit ng
Billing::Invoice, at aling mga subroutine nito ang tinatawag nila?” (dependency_search na incoming)
- “Saan ginagawa ang
Report::Monthly, at ano ang nangyayari pagkatapos ng ->new?” (find_symbol, tapos get_task_context)
- “Hanapin ang lahat ng test file na nagte-test sa
Auth::Session.” (text_pattern_search, tapos find_symbol)
Mga kilalang limitasyon
- Payak na
sub declaration lang sa loob ng package ang mga klasikong Perl method, kaya sa structural search, ang mas bagong dedikadong method syntax lang ang itinuturing na method. Gamitin ang functions preset para sa mas lumang object-oriented na Perl.
- Hindi lumalabas bilang graph edge ang mga call sa mga na-filter na built-in. Gamitin ang
text_pattern_search kapag kailangan mo ang bawat open o print call.
Mga susunod na hakbang
Mag-connect ng repository gamit ang quickstart, tapos tingnan ang support matrix sa compatibility page. Kung ililipat ang legacy code sa ibang scripting language, ikumpara sa gabay sa Python.