G'day meetraz,
If you put this line
INIT { exit }
before any other INIT blocks,
your "app" should terminate before any runtime processing occurs.
I put together this quick and dirty test script (pm_1198271_prof_compile_only.pl):
#!/usr/bin/env perl
use strict;
use warnings;
use autodie ':all';
use Moose;
BEGIN {
print "BEGIN block\n";
}
sub should_not_run {
print "&should_not_run ran!\n";
}
should_not_run();
print "This shouldn't print\n";
INIT { exit }
INIT { print "This INIT shouldn't run.\n" }
Running that by itself:
$ pm_1198271_prof_compile_only.pl
BEGIN block
Then doing as ++choroba suggested:
$ perl -d:NYTProf pm_1198271_prof_compile_only.pl
BEGIN block
$ nytprofhtml
Reading nytprof.out
Processing nytprof.out data
Writing line reports to nytprof directory
100% ...
Extracting subroutine call data ...
Extracting subroutine links
Generating subroutine stack flame graph ...
View "nytprof/index.html" in the browser of your choice.
The third table, "Source Code Files — ordered by exclusive time then name",
should show what you're looking for, longest compile time first.
By using 'INIT { exit }',
the profile results won't contain any runtime data;
and it's just one line to remove when you've finished.
|