The
.. "flip-flop" operator (see
perlop) is true "between" the two operands. That is, once the left-hand match is true, the flip-flop is true,
until whenever the right-hand match succeeds. Then it's false until the left-hand match is true, and so on.
So, no:
if (/Start context/ .. /\* End Context \*/) { doesn't "take" "all the lines between the first 'Start context' in the file and last '* end context *'", but indeed only those within any of the contexts (and the start marker too, but not the end marker).