First you convert $days_mask[$i] from decimal to binary: look here for an example (and it could be a good opportunity to dig into the mysteries of pack). Then you use the string of binary digits you obtained to inspest the "weeklyness" of an event.
In your example, 10 is 1010 in binary: the 1 in the second position (position number 1, since you count from 0) tells that the event repeats every Monday. The same "trick" for the 1 in the third position.
Ok, maybe I'm a little dense: if I understand you correctly, I should be able to determine "monday" from the 1 in the first position of the binary number "1010". However, how does this work for other values, like say, Tuesday, which would show up as 4, which is 100 in binary??
my $Sun = 2**0; # That's 1 or 00000001 in binary.
my $Mon = 2**1; # That's 2 or 00000010 in binary.
my $Tue = 2**2; # That's 4 or 00000100 in binary.
my $Wed = 2**3; # That's 8 or 00001000 in binary.
my $Thu = 2**4; # That's 16 or 00010000 in binary.
my $Fri = 2**5; # That's 32 or 00100000 in binary.
my $Sat = 2**6; # That's 64 or 01000000 in binary.
my $mask = 19; # For example. 00010011 in binary.
print "Sunday\n" if ($mask & $Sun); # True
print "Monday\n" if ($mask & $Mon); # True
print "Tuesday\n" if ($mask & $Tue);
print "Wednesay\n" if ($mask & $Wed);
print "Thursday\n" if ($mask & $Thu); # True
print "Friday\n" if ($mask & $Fri);
print "Saturday\n" if ($mask & $Sat);
The first example is 1010, that is (I'm considering the binary digits from right to left):
0 * 20 + 1 * 21 + 0 * 22 + 1 * 23
Your second example is 100. As usual, from right to left...
0 * 20 + 0 * 21 + 1 * 22
Got the pattern? Now I'm going to check what powers of 2 are on (i.e. multiplied by 1). In the first example they are
21 (Monday) and 23 (Wednesday). In the second example only 22, Tuesday.