You didn't run the test with reversed redirection, so the above doesn't actually show anything new. Here's what I get with your code, including also a reversed order test:
~> perl foobar.pl
Normal STDOUT
Going to STDERR
~> echo 'Just a starting point
> > ' >JGBtest.txt
~> cat JGBtest.txt
Just a starting point
>
~> perl foobar.pl >>JGBtest.txt 2>&1
~> cat JGBtest.txt
Just a starting point
>
Going to STDERR
Normal STDOUT
~> perl foobar.pl 2>&1 >>JGBtest.txt
Going to STDERR
~> cat foobar.pl
#!/usr/bin/perl
use warnings;
use strict;
print "Normal STDOUT\n";
warn "Going to STDERR\n";
exit;
__END__
~>
Which again shows that the redirection order does matter, and in the 2>&1 >>file case, STDERR goes to the output, not the file.
Update: And just to illustrate it in one more way...
~> perl foobar.pl >>JGBtest.txt 2>&1 &
[1] 22571
~> ll /proc/22571/fd
total 0
lrwx------ 1 user group 64 2014-10-29 16:31 0 -> /dev/pts/11
l-wx------ 1 user group 64 2014-10-29 16:31 1 -> /home/user/JGBtest.tx
+t
l-wx------ 1 user group 64 2014-10-29 16:31 2 -> /home/user/JGBtest.tx
+t
~> perl foobar.pl 2>&1 >>JGBtest.txt &
[2] 22578
~> ll /proc/22578/fd
total 0
lrwx------ 1 user group 64 2014-10-29 16:32 0 -> /dev/pts/11
l-wx------ 1 user group 64 2014-10-29 16:32 1 -> /home/user/JGBtest.tx
+t
lrwx------ 1 user group 64 2014-10-29 16:32 2 -> /dev/pts/11
~> cat foobar.pl
#!/usr/bin/perl
sleep(100);
|