in reply to Environment variables
Here's a good (and typical...) example.
Let's say that I'm setting up a new web-site for a new client. I'll have a “deployed” copy of the site, which talks to the “real” databases, and I'll have a second “dev” copy (identical to the first...) which talks to the development databases.
Did you catch that? “Identical to” the first?
Environment-variables are a great way, and a very simple way, to (say...) tell the software that it's running in “production,” or “dev.”
You simply arrange (by whatever means may be appropriate...) for the appropriate value to be stored, and the app can see it in the "$ENV{}" hash. Easy!
As others have mentioned, this concept has been around for a very long time now, and both Windows and Linux and Unix all implement it. An environment-variable is nothing more than “a named string,” and every process in the system can have its own (moderately-sized...) list of them. So it's both useful and easy-to-implement.