in reply to Re: Programming in Perl without semicolon
in thread Programming in Perl without semicolon
Yuck! Use use vars.
{ use vars qw( @cache @n ) } {@cache = (0, 1)} sub fib { {push @n, shift} {return pop @n if $n[-1] < 2} {$cache [$n[-1]] ||= fib ($n[-1] - 1) + fib ($n[-1] - 2)} {return $cache[pop @n]} }
Bonus: Doesn't confine you to the main namespace!
Now if we could only localize variables, we wouldn't need to manage our own stack.
{ use vars qw( @cache ) } {@cache = (0, 1)} sub fib { (local (our $n = shift)) && do { {return $n if $n < 2} {$cache[$n] ||= fib ($n - 1) + fib ($n - 2)} {return $cache[$n]} } }
Bonus: Don't have to use use vars except for globals!
By the way, the body simplifies down to a single expression, and your cache initialiser is not needed.
{ use vars qw( @cache ) } sub fib { (local (our $n) = shift), ( $n < 2 ? $n : $cache[$n] ||= fib ($n - 1) + fib ($n - 2) ) }
Update: Replaced buggy
(local our $n = shift) && ...
with
(local (our $n) = shift) && ...
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^3: Programming in Perl without semicolon
by JavaFan (Canon) on Jan 31, 2009 at 08:37 UTC | |
by ikegami (Patriarch) on Jan 31, 2009 at 18:54 UTC | |
by JavaFan (Canon) on Jan 31, 2009 at 10:20 UTC |