in reply to Re^3: converting binary to decimal
in thread converting binary to decimal

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; }

Replies are listed 'Best First'.
Re^5: converting binary to decimal
by LanX (Saint) on Jun 06, 2025 at 21:57 UTC
    Not my code, and far too tricky to maintain in my opinion.

    Relying on the idiosyncracies of | is nothing I recommend.

    I even have problems to reproduce my own explanation in the debugger.

    The original code works tho when tested. 🤷🏻‍♀️

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    see Wikisyntax for the Monastery

      > I even have problems to reproduce my own explanation in the debugger.

      And the reason is that it's supposed to be a "bitstring" not "numeric bit" operation.

      see https://perldoc.perl.org/perlop#Bitwise-String-Operators

      hence replacing | with |. under use feature "bitwise" will stop doing hard to predict things, even after refactoring this golfing code.

      ugh...

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      see Wikisyntax for the Monastery

        That's why the original code very intentionally |'s together two results of the (higher precedence) concatenation operator '.' - which always produces a "string" and not a "number".

        voodoo89 tybalt89