Джеймс МакНеллис предоставил отличный ответ , но вот альтернативное мнение:
Я думаю, getenv()
возвращает значение переменной среды привремя программа была запущена.Если переменная окружения будет изменена после запуска программы, getenv()
все равно вернет старое значение.Исходя из этого, альтернативный подход может заключаться в том, чтобы иметь класс для захвата всех необходимых переменных среды в качестве атрибутов.Класс заполняется в начале программы и предоставляет только методы доступа (удовлетворяющие константам).Таким образом, getenv()
называется ровно один раз для каждой переменной среды.С другой стороны, класс занимает немного места.
В альтернативном подходе, в котором не используется пробел, getenv()
вызывается всякий раз, когда требуется значение любой переменной среды.Дело не в том, что вызов getenv()
дорогой (на самом деле я не знаю), но он несет ложное предположение программисту, что может быть возвращено последнее значение.
Также наличие класса может быть полезно для абстрагирования, если есть какие-либо зависимости в использовании переменных окружения, например,
if $OS = "SunOs"
then
GCC="/bin/gcc"
else
GCC="/usr/bin/gcc"
(this is just an example though)
Теперь функция, которой нет дела до $OS
, нонужно только $GCC
, можно просто сослаться на envClass->get("GCC");
Просто мысль.