Your script does not contain
use strict;
use warnings;
If that's what the examples you followed led to, you may have followed the wrong PM examples!
If you do add strict and uncomment warnings, your script outputs this:
Variable "$cookie" is not imported at ./foo line 51.
(Did you mean &cookie instead?)
Variable "$cookie" is not imported at ./foo line 56.
(Did you mean &cookie instead?)
Variable "$cookie" is not imported at ./foo line 63.
(Did you mean &cookie instead?)
Variable "$cookie" is not imported at ./foo line 67.
(Did you mean &cookie instead?)
Global symbol "$query" requires explicit package name at ./foo line 15
+.
Global symbol "$perror" requires explicit package name at ./foo line 1
+7.
Global symbol "$wearelooping" requires explicit package name at ./foo
+line 18.
Global symbol "$redirectURL" requires explicit package name at ./foo l
+ine 19.
Global symbol "$gotcookies" requires explicit package name at ./foo li
+ne 23.
Global symbol "$env" requires explicit package name at ./foo line 24.
Global symbol "$query" requires explicit package name at ./foo line 24
+.
Global symbol "$resumepath" requires explicit package name at ./foo li
+ne 25.
Global symbol "$query" requires explicit package name at ./foo line 25
+.
Global symbol "$env" requires explicit package name at ./foo line 30.
Global symbol "$redirectURL" requires explicit package name at ./foo l
+ine 30.
Global symbol "$resumepath" requires explicit package name at ./foo li
+ne 34.
Global symbol "$redirectURL" requires explicit package name at ./foo l
+ine 34.
Global symbol "$resumepath" requires explicit package name at ./foo li
+ne 34.
Global symbol "$perror" requires explicit package name at ./foo line 3
+5.
Global symbol "$gotcookies" requires explicit package name at ./foo li
+ne 41.
Global symbol "$perror" requires explicit package name at ./foo line 4
+1.
Global symbol "$gotcookies" requires explicit package name at ./foo li
+ne 44.
Global symbol "$wearelooping" requires explicit package name at ./foo
+line 44.
Global symbol "$wearelooping" requires explicit package name at ./foo
+line 50.
Global symbol "$perror" requires explicit package name at ./foo line 5
+0.
Global symbol "$cookie" requires explicit package name at ./foo line 5
+1.
Global symbol "$query" requires explicit package name at ./foo line 51
+.
Global symbol "$query" requires explicit package name at ./foo line 55
+.
Global symbol "$cookie" requires explicit package name at ./foo line 5
+6.
Global symbol "$redirectURL" requires explicit package name at ./foo l
+ine 57.
Global symbol "$query" requires explicit package name at ./foo line 58
+.
Global symbol "$query" requires explicit package name at ./foo line 60
+.
Global symbol "$cookie" requires explicit package name at ./foo line 6
+3.
Global symbol "$query" requires explicit package name at ./foo line 63
+.
Global symbol "$query" requires explicit package name at ./foo line 67
+.
Global symbol "$cookie" requires explicit package name at ./foo line 6
+7.
Global symbol "$query" requires explicit package name at ./foo line 68
+.
Global symbol "$query" requires explicit package name at ./foo line 69
+.
Global symbol "$query" requires explicit package name at ./foo line 71
+.
Global symbol "$query" requires explicit package name at ./foo line 73
+.
Execution of ./foo aborted due to compilation errors.
See why it's important?
Remember: Ne dederis in spiritu molere illegitimi!