in reply to Manually adding delimiters instead of join()
The answer is that your particular delimiter '::' has syntactic significance in Perl -- it is the package delimiter. Thus the first form is parsed as a (rather gnarly) package variable. But the second does what you want: substitute each variable individually and then join with the syntax sensitive ::.
If your delimiter had been something more benign, like whitespace, both forms would work.
-Mark
In Section
Seekers of Perl Wisdom