Clear questions and runnable code get the best and fastest answer |
|
PerlMonks |
comment on |
( [id://3333]=superdoc: print w/replies, xml ) | Need Help?? |
I wrote a little benchmark test to check the performance of different implementations package MyClass1; sub new { my $invocant = shift; my $class = ref($invocant) || $invocant; my $self = undef; #Set the Default Attributes and assign the initial Values $self = { "_report" => "", "_count" => 0 }; #Bestow Objecthood bless $self, $class; #Give the Object back return $self; } sub newFunctionName { my $self = shift; $self->{"_count"} = shift; $self->{"_report"} = __PACKAGE__ . " - run no. '" . $self->{"_count"} . "'\n"; } sub oldFunctionName { my $self = shift; $self->newFunctionName(@_); } package MyClass2; sub new { my $invocant = shift; my $class = ref($invocant) || $invocant; my $self = undef; #Set the Default Attributes and assign the initial Values $self = { "_report" => "", "_count" => 0 }; #Bestow Objecthood bless $self, $class; #Give the Object back return $self; } sub newFunctionName { my $self = shift; $self->{"_count"} = shift; $self->{"_report"} = __PACKAGE__ . " - run no. '" . $self->{"_count"} . "'\n"; } sub oldFunctionName { goto &newFunctionName; } package MyClass3; sub new { my $invocant = shift; my $class = ref($invocant) || $invocant; my $self = undef; #Set the Default Attributes and assign the initial Values $self = { "_report" => "", "_count" => 0 }; #Bestow Objecthood bless $self, $class; #Give the Object back return $self; } sub newFunctionName { my $self = shift; $self->{"_count"} = shift; $self->{"_report"} = __PACKAGE__ . " - run no. '" . $self->{"_count"} . "'\n"; } sub oldFunctionName { &newFunctionName; } package main; use Benchmark; my $o1 = MyClass1->new; my $o2 = MyClass2->new; my $o3 = MyClass3->new; my $icnt = 0; print "count 0: '$icnt':\n"; print "o1 report 0 (count: '" . $o1->{"_count"} . "'): '" . $o1->{"_report"} . "'\n"; print "o2 report 0 (count: '" . $o2->{"_count"} . "'): '" . $o2->{"_report"} . "'\n"; print "o3 report 0 (count: '" . $o3->{"_count"} . "'): '" . $o3->{"_report"} . "'\n"; timethese( 10000000, { 'MyClass1' => sub { $icnt = 0 if($o1->{"_count"} == 0); $icnt++; $o1->oldFunctionName($icnt); }, 'MyClass2' => sub { $icnt = 0 if($o2->{"_count"} == 0); $icnt++; $o2->oldFunctionName($icnt); }, 'MyClass3' => sub { $icnt = 0 if($o3->{"_count"} == 0); $icnt++; $o3->oldFunctionName($icnt); }, }); print "count 0: '$icnt':\n"; print "o1 report 0 (count: '" . $o1->{"_count"} . "'): '" . $o1->{"_report"} . "'\n"; print "o2 report 0 (count: '" . $o2->{"_count"} . "'): '" . $o2->{"_report"} . "'\n"; print "o3 report 0 (count: '" . $o3->{"_count"} . "'): '" . $o3->{"_report"} . "'\n";
The test result was: count 0: '0': o1 report 0 (count: '0'): '' o2 report 0 (count: '0'): '' o3 report 0 (count: '0'): '' Benchmark: timing 10000000 iterations of MyClass1, MyClass2, MyClass3... MyClass1: 8 wallclock secs ( 7.48 usr + 0.00 sys = 7.48 CPU) @ 1336898.40/s (n=10000000) MyClass2: 7 wallclock secs ( 6.61 usr + 0.00 sys = 6.61 CPU) @ 1512859.30/s (n=10000000) MyClass3: 6 wallclock secs ( 5.96 usr + 0.00 sys = 5.96 CPU) @ 1677852.35/s (n=10000000) count 0: '10000000': o1 report 0 (count: '10000000'): 'MyClass1 - run no. '10000000' ' o2 report 0 (count: '10000000'): 'MyClass2 - run no. '10000000' ' o3 report 0 (count: '10000000'): 'MyClass3 - run no. '10000000' '
I repeated the test several times and it gives always the same result pattern.
I didn't know this possible Syntax yet. In reply to Re^5: Number of times I've used goto in Perl
by HugoNo1
|
|