Hmm... That's amazing. But i tried to break it down into more easily understandable parts for me, and I think I broke it! Can you please show me why it no longer works?
EDIT: I think I know what I did wrong. I accidentally doubled the "|" character. I can't even type. X_X
sub binary2decimal
{
defined $_[0] or return 0;
my $B = $_[0];
$B =~ tr|01||cd; # Remove illegal chars
$B =~ s/^0+//; # Remove preceding zeros
my @BITS = split(//, $B);
my $n = 0;
my $copy1;
my $copy2;
my $copy3;
foreach (@BITS)
{
$copy1 = $n;
$copy2 = $n;
$copy1 =~ tr/1-9/246802468/;
$copy2 =~ tr/1-9/00001/;
$n = (0 . $copy1 || $copy2 . $_); # This should be | not ||
$n =~ s/^0+(?=.)//;
}
return $n;
}