use 5.026; 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 @arrayResult = vec2array( vecORvec( array2vec( @array1 ), array2vec( @array2 ) ) ); say join q{, }, @arrayResult; sub array2vec { my $rhVec = {}; $rhVec->{ len } = scalar @_; $rhVec->{ vec } = q{}; vec( $rhVec->{ vec }, $_, 1 ) = $_[ $_ ] for 0 .. $rhVec->{ len } - 1; return $rhVec; } sub vec2array { my @array = map { vec $_[ 0 ]->{ vec }, $_, 1 } 0 .. $_[ 0 ]->{ len } - 1; return @array; } sub vecORvec { my( $rhVec1, $rhVec2 ) = @_; my $rhNewVec; $rhNewVec->{ len } = $rhVec1->{ len }; $rhNewVec->{ vec } = $rhVec1->{ vec } | $rhVec2->{ vec }; return $rhNewVec; }