using words instead of symbols for things. Like in C you have {} and in lua you have "do end" and "if then elseif else end" etc.
at first you feel like you're just typing too much, and reading too much (it's harder to just glance at something verbose without having to actually parse and read the words as if they were english)
but you get used to it and the lack of having to hit shift kind of grows on you
What could have possibly caused them to make global scope the default? That means you need to explicitly declare every single variable as local (I was taught that you should never use global variables, ever, unless you declare them as constant)!
The development of the language is the answer to almost any odd thing in any language. Globals are not really a problem in small simple programs, and that's what lua was originally meant for. ( And honestly most Civ V mods will probably be < 1000 lines of code anyway.) I'm also pretty sure that lexical scoping was added later on in development, and they probably wanted to maintain some backward compatibility, so they added the local keyword. (citation needed

)
Another important thing to keep in mind is that a function (unless this is outdated information... not sure) can only have 256 local variables. You shouldn't really ever design a function with that much responsibility, but the limitation is meaningful I guess. (could still be solved if they had a 'global' keyword instead)
A third important factor is in lua (like JavaScript) there's no difference between a "variable" and a "definition," there are only "variable"s and "value"s. So there's no difference between classes, containers, namespaces, or even
instantiations of structs. They're all just "table"s. And all functions are first-class objects held in variables. So instead of having global definitions for abstract classes, you might have global prototypes which are actually instantiations in and of themselves (or global constructor functions.) So things that are technically "global variables" in lua would not be in a similar design in C++, despite the fact that in C++ it still crowds the global namespace just as much.
I guess the way you have to look at it is that "variable" means a lot more in lua than it does in C/C++, so "never use global variables" isn't quite
as valid an idiom. "Never use global variables as anything but definitions" might be better?
Anyway, in lua there are still techniques to avoid crowding the _G table too much. Lua supports object-oriented and functional programming styles (usually used in a delightful mix.) And you do them with the 'local' keyword and the 'self/:' syntactic sugar. Everywhere. They've tried to mitigate this with the "module" system but I honestly think it's a bit (and uncharacteristically) clumsy... I dunno. Currently I just live with making almost every variable local.
P.S. anyone wanting to learn lua, I put my vote in for
"Programming in Lua" by Roberto Ierusalimschy (the main architect of lua) It has an informal tone, includes tons of example code, and gives non-bare-bones tips and tricks at a pace that isn't overwhelming.
Additionally,
Lua For Windows is a neat "batteries included" environment for playing with lua. It includes tons of useful libraries and an interactive guide to the language.
P.P.S. I swear I'm not a spokesperson... I just don't want such a wonderfully talented modding community to become frustrated.
