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

> 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

Replies are listed 'Best First'.
Re^7: converting binary to decimal
by tybalt89 (Monsignor) on Jun 07, 2025 at 18:03 UTC

    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

      guess what, refactoring fails,

      my $copy1b = '0' . $copy1; my $copy2b = $copy2 . $_; $n = ($copy1b | $copy2b);

      copying it literally into the debugger too

      DB<38> say (0 . "$_" | 1 . "1") for qw/0 2 4 6 8/ 11 11 15 15 11

      The only fix is using |. and use feature 'bitwise';

      DB<39> use feature 'bitwise'; say (0 . "$_" |. 1 . "1") for qw/0 2 4 + 6 8/ 11 13 15 17 19

      > voodoo89

      Yeah, now go back and sacrifice 89 more chickens to the god of golf ;-P

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

        Er, Umm, no.

        $ perl -le 'print(0 . $_ | 1 . 1) for qw/0 2 4 6 8/' 11 13 15 17 19
        Most probable reason you are seeing what you saw -> you did "use feature 'bitwise'" earlier in your debugging session. 'bitwise' forces plain | to numeric.

        voodoo89 tybalt89 looks around for more chickens...