On Sep 8, 2006, at 6:48 PM, A. Pagaltzis wrote:

* Chris Dolan <[EMAIL PROTECTED]> [2006-09-08 17:10]:
Why did you use "local"?  Shouldn't the following work?

    sub flatten_copy {
        my $s = shift;
        ref $s eq 'SCALAR' ? "$$s" : "$s";
    }

Works the same. I often use `local $_` in tiny functions that
mangle just a single value. Matter of taste/style.

Ahh, I see -- cargo cult.  ;-)

Changing the topic a little bit... I've always suspected there was a speed difference between local and my. So, I just benchmarked the two versions, and "my" wins by a wide margin:

% perl test.pl
          Rate local    my
local 467290/s    --  -33%
my    699301/s   50%    --

% perl -v

This is perl, v5.8.6 built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)


=============  test.pl ==============
#!/usr/bin/perl -w

use strict;
use Benchmark qw(cmpthese);

my $s = 'foo';
$_ = 'foo';

cmpthese(1_000_000, {
   'local' => sub {
      flatten_copy_local('bar');
   },
   'my' => sub {
      flatten_copy_my('bar');
   },
});

sub flatten_copy_local {
   local $_ = shift;
   ref $_ eq 'SCALAR' ? "$$_" : "$_";
}
sub flatten_copy_my {
   my $s = shift;
   ref $s eq 'SCALAR' ? "$$s" : "$s";
}
========================================

--
Chris Dolan, Software Developer, Clotho Advanced Media Inc.
608-294-7900, fax 294-7025, 1435 E Main St, Madison WI 53703
vCard: http://www.chrisdolan.net/ChrisDolan.vcf

Clotho Advanced Media, Inc. - Creators of MediaLandscape Software (http://www.media-landscape.com/) and partners in the revolutionary Croquet project (http://www.opencroquet.org/)


Reply via email to