{"id":9196,"date":"2005-07-05T11:33:40","date_gmt":"2005-07-05T08:33:40","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/2005\/07\/05\/profiling-perl\/"},"modified":"2005-10-03T08:45:26","modified_gmt":"2005-10-03T05:45:26","slug":"profiling-perl","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2005\/07\/05\/profiling-perl\/","title":{"rendered":"Profiling perl"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p>After I&#8217;ve complained on #perl channel that <code>dprofpp<\/code> (perl profiler) dies on me, I received a number of suggestions on how to profile the code without using <code>dprofpp<\/code>.  Ideas ranged from elemetary insertion of &#8216;print &#8220;Started&#8221;, time,&#8221;\\n&#8221;&#8216; to all sorts of dynamic subroutine overloading.  Here is one elegant solution that was suggested:<\/p>\n<pre>\r\nsub foo { print \"foo (@_)\\n\" }\r\nsub bar { print \"bar (@_)\\n\" }\r\n\r\nfor (qw(foo bar)) {\r\n  my $name = \"main::\" . $_;\r\n  my $old = *$name{CODE};\r\n  *$name = sub {\r\n    print scalar(localtime), \" Started $name\\n\";\r\n    &$old;\r\n    print scalar(localtime), \" Finished $name\\n\";\r\n  };\r\n}\r\n\r\nfoo(qw(one two));\r\nbar(qw(three four));\r\n<\/pre>\n<p>Oh, and someone also mentioned that <code>dprofpp<\/code> is known to be buggy.  Here is a quote from the &#8220;<a href=\"http:\/\/www.perl.com\/pub\/a\/2004\/06\/25\/profiling.html\">Profiling Perl<\/a>&#8221; article at <a href=\"http:\/\/www.perl.com\">perl.com<\/a>:<\/p>\n<blockquote cite=\"http:\/\/www.perl.com\/pub\/a\/2004\/06\/25\/profiling.html\"><p>The other problem you might face is that <code>Devel::DProf<\/code>, being somewhat venerable, occasionally has problems keeping up on certain recent Perls, (particularly the 5.6.x series) and <strong>may end up segfaulting all over the place<\/strong>.<\/p><\/blockquote>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>After I&#8217;ve complained on #perl channel that dprofpp (perl profiler) dies on me, I received a number of suggestions on how to profile the code without using dprofpp. Ideas ranged from elemetary insertion of &#8216;print &#8220;Started&#8221;, time,&#8221;\\n&#8221;&#8216; to all sorts of dynamic subroutine overloading. Here is one elegant solution that was suggested: sub foo { &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2005\/07\/05\/profiling-perl\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Profiling perl<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_links_to":"","_links_to_target":""},"categories":[1,18],"tags":[246,36,244,245,248,247,249,74],"keyring_services":[],"class_list":["post-9196","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","tag-optimization","tag-perl","tag-profile","tag-profiling","tag-solutions","tag-suggestions","tag-techniques","tag-tips"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":11461,"url":"https:\/\/mamchenkov.net\/wordpress\/2008\/12\/12\/perl-vs-php-variable-scoping\/","url_meta":{"origin":9196,"position":0},"title":"Perl vs. PHP : variable scoping","author":"Leonid Mamchenkov","date":"December 12, 2008","format":false,"excerpt":"I've mentioned quite a few times that I am a big fan of Perl programming languge.\u00a0 However, most of my programming time these days is spent in PHP.\u00a0 The languages are often similar, with PHP having its roots in Perl, and Perl being such a influence in the world of\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":7369,"url":"https:\/\/mamchenkov.net\/wordpress\/2004\/03\/23\/calculator-at-hand\/","url_meta":{"origin":9196,"position":1},"title":"Calculator at hand","author":"Leonid Mamchenkov","date":"March 23, 2004","format":false,"excerpt":"UNIX shell is excellent. The toolbox at hand also never stop to amaze. But sometimes there is this feeling that something is missing. No matter how many tools are there, you'll still want something special and personalized. I am pretty often missing the calculator. Of course, there are xcalc and\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":9613,"url":"https:\/\/mamchenkov.net\/wordpress\/2005\/10\/26\/missing-some-regexp-knowledge\/","url_meta":{"origin":9196,"position":2},"title":"Missing some regexp knowledge","author":"Leonid Mamchenkov","date":"October 26, 2005","format":false,"excerpt":"Once in a while I come across some topic that I should have learned a billion years ago. Something very basic and useful that I had a chance of seeing many times but haven't, or probably had and ignored it. Today I found out that I was missing an important\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":8006,"url":"https:\/\/mamchenkov.net\/wordpress\/2004\/10\/05\/sending-a-hash-to-perls-scalar-function\/","url_meta":{"origin":9196,"position":3},"title":"Sending a hash to perl&#8217;s scalar function","author":"Leonid Mamchenkov","date":"October 5, 2004","format":false,"excerpt":"While writing a test suite for one of my applications today, I came across an interesting result. Perl's scalar function, if given a hash as an argument, will return something like \"2\/8\" or \"5\/16\". Results can be identical for different hashes. There is no obvioius trend in changing of these\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":9198,"url":"https:\/\/mamchenkov.net\/wordpress\/2005\/07\/06\/analysis-of-two-perl-lines\/","url_meta":{"origin":9196,"position":4},"title":"Analysis of two perl lines","author":"Leonid Mamchenkov","date":"July 6, 2005","format":false,"excerpt":"Today I saw these two lines in one backup script that was written in perl: my $d = (localtime())[6]; $d = $d=~\/[067]\/ ? 0 : $d % 2 + 1; Does this look cryptic to you? Probably not. But I wanted to write something and thought that these two lines\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":24399,"url":"https:\/\/mamchenkov.net\/wordpress\/2015\/06\/24\/rt-initialdata-and-perls-nested-map\/","url_meta":{"origin":9196,"position":5},"title":"RT initialdata and Perl&#8217;s nested map","author":"Leonid Mamchenkov","date":"June 24, 2015","format":false,"excerpt":"Request Tracker (aka RT) comes with a very powerful, yet not too widely known tool - initialdata. \u00a0This helps with automating\u00a0configuration of the new system and data migration. \u00a0Combined with the power of Perl's map() function, some really awesome things can be done in a jiffy. Here is a snippet\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/9196","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=9196"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/9196\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=9196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=9196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=9196"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=9196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}