in reply to merging two arrays with OR operation

Sometimes you may compose a binary representation of number (e.g. '0b010101111111') (docs: perlnumber), eval it, use bitwise op, and return to binary representation using sprintf "%b", with '0${len}' for leading zeroes.
#!/usr/bin/perl -l use strict; use warnings; my @array1 = (0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1); my @array2 = (0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1); my $bits1 = eval '0b' . join '', @array1; my $bits2 = eval '0b' . join '', @array2; my $bitsResult = $bits1 | $bits2; my $len = scalar @array1; my @arrayResult = split //, sprintf "%0${len}b", $bitsResult; print "\$bits1:[$bits1], \$bits2:[$bits2], \$bitsResult:[$bitsResult]" +; print "Result: ", join(", ", @arrayResult), "\n";
OUTPUT:
$bits1:[1407], $bits2:[855], $bitsResult:[1919] Result: 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1

Replies are listed 'Best First'.
Re^2: merging two arrays with OR operation
by rsFalse (Chaplain) on Mar 05, 2019 at 23:28 UTC
    Also you may want to look at Bitwise String Operators, and relatively new bitwise operator '|.'.
    Here I use v5.28.0:
    #!/usr/bin/perl -wl use strict; my @array1 = (0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1); my @array2 = (0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1); my $bits1 = join '', @array1; my $bits2 = join '', @array2; print $bits1 | $bits2; use feature 'bitwise'; # from v5.22 print $bits1 | $bits2; print $bits1 |. $bits2; # So... print "Result: ", join ', ', split //, $bits1 |. $bits2;
    OUTPUT:
    011101111111 4294967295 011101111111 Result: 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1