Okay I stand corrected in that order matters. That said, I honestly can't remember ever seeing 2>&1 not coming at the end of the command line, probably because doing so seems to indicate that it won't be captured to STDOUT as one desires.
~/stuff > cat JGBtest.txt
Just a starting point
~/stuff > perl foobar.pl 2>&1 >>JGBtest.txt
Going to STDERR
~/stuff > cat JGBtest.txt
Just a starting point
Normal STDOUT
~/stuff > perl foobar.pl 2>&1 >>JGBtest.txt | grep STD
Going to STDERR
~/stuff > perl foobar.pl 2>&1 | grep STD
Going to STDERR
Normal STDOUT
~/stuff >
With all of the foregoing comments by both you and me in mind, I think you're first comment implies that it must come first in order to be captured. But in the interest of being complete even if I'm wrong, I included the final tests that does actually demonstrate what is happening on the command line (though it is not intuitive.) Also, it is possible that setting $| = 1; might alter the output ordering.
You must always remember that the primary goal is to drain the swamp even when you are hip-deep in alligators.