Uri Guttman wrote: > i have had the pleasure of doing code review for a client and finding > this gem: > > sub new { > my $class = shift; > my %params = (@_); > my $self = {}; > my $package = caller(); > for my $key ( keys %params ) { > $self->{$key} = $params{$key}; > } > bless( $self, $class ); > return $self; > } > > even better than just be a poorly written constructor is that it is > inside a 'factory' module that is inherited by 80 other modules!!
If that's an example of "poorly written" code in your project, can I come work there? It at least gets it right, if verbosely. > anyhow you have two challenges, if you desire. the first is very easy > but amusing when compared to the original code. rewrite that sub (a > minimal constructor that takes a key/value list and makes a hash based > object with no extra checking or work) with the shortest but cleanest > and clear code you can. > > i have a clean 2 line version that would be understood by almost > anyone. it was the one i benchmarked against the original. sub new { my $class = shift; return bless( [EMAIL PROTECTED], $class ); } > your second challenge is to golf the same constructor. the char count > will be between the {} of the sub body as the name and 'sub' are > constant. > > i have two solutions of 33 and 24 chars so you have to beat those. the > longer one is amusing enough to show it later. sub new [EMAIL PROTECTED],shift} Was my first shot at 23. Then I figured I could knock off that range op... sub new {$a=shift;[EMAIL PROTECTED],$a} 21. And it's even strict clean. :) -- THIS I COMMAND!