in reply to Zeckendorf representation
sub is_fibonnacci {
my $plus = (5 * $_[0] * $_[0]) + 4;
my $mins = (5 * $_[0] * $_[0])  4;
return is_perfect_square($plus)  is_perfect_square($mins);
}
No need to calculate 5 * $_[0] * $_[0] twice, and you probably meant to use the logical or operator instead of the bitwise or operator.
sub is_fibonnacci {
my $plus = (5 * $_[0] * $_[0]) + 4;
my $mins = $plus  8;
return is_perfect_square($plus)  is_perfect_square($mins);
}
(The logical operators shortcircuit so is_perfect_square($mins) will only execute if is_perfect_square($plus) is true.)
sub is_perfect_square {
my $sqrt = int(sqrt($_[0]));
return $sqrt * $sqrt == $_[0];
}
Or just:
sub is_perfect_square { int( $_[0] ** .5 ) ** 2 == $_[0] }
Re^2: Zeckendorf representation by thmsdrew (Scribe) on Aug 25, 2012 at 03:11 UTC 
Thanks for your input! What do you mean by "short circuit"? Also, the difference between your is_perfect_square sub and mine is that mine is much more clear. I can afford the extra line for a bit of clarity.
 [reply] 

What do you mean by "short circuit"?
It means that the part after  will only be evaluated if it is needed know the result of the operator. In the case of the oroperator the second half is redundant if the first is true, since the total will be true no matter what the second part is.
 [reply] [d/l] 

I don't really understand how that is a problem. If the first part passes, then I want it to return true, and I truly don't care what the second part is. I guess I see how that's redundant, though.
 [reply] 
