tclvars
-
НАЗВАНИЕ
- argc, argv, argv0, auto_path, env, errorCode, errorInfo, tcl_interactive, tcl_library, tcl_nonwordchars, tcl_patchLevel, tcl_pkgPath, tcl_platform, tcl_precision, tcl_rcFileName, tcl_traceCompile, tcl_traceExec, tcl_wordchars, tcl_version — Переменные, используемые Tcl
- ОПИСАНИЕ
-
auto_path
- env
-
env(HOME)
- env(TCL_LIBRARY)
- env(TCLLIBPATH)
- env(TCL_TZ), env(TZ)
- env(LC_ALL), env(LC_MESSAGES), env(LANG)
- env(TCL_INTERP_DEBUG_FRAME)
- env(TCL_LIBRARY)
- env
- errorCode
-
ARITH code msg
- CHILDKILLED pid sigName msg
- CHILDSTATUS pid code
- CHILDSUSP pid sigName msg
- NONE
- POSIX errName msg
- TCL ...
- CHILDKILLED pid sigName msg
- errorInfo
- tcl_library
- tcl_patchLevel
- tcl_pkgPath
- tcl_platform
-
byteOrder
- debug
- engine
- machine
- os
- osVersion
- pathSeparator
- platform
- pointerSize
- threaded
- user
- wordSize
- debug
- tcl_precision
-
tcl_rcFileName
- tcl_traceCompile
- tcl_traceExec
-
tcl_wordchars
- tcl_nonwordchars
- tcl_version
- tcl_nonwordchars
-
argc
- argv
- argv0
- tcl_interactive
- argv
Имя
argc, argv, argv0, auto_path, env, errorCode, errorInfo, tcl_interactive, tcl_library, tcl_nonwordchars, tcl_patchLevel, tcl_pkgPath, tcl_platform, tcl_precision, tcl_rcFileName, tcl_traceCompile, tcl_traceExec, tcl_wordchars, tcl_version — Переменные, используемые TclОписание
Следующие глобальные переменные создаются и управляются автоматически библиотекой Tcl. За исключением случаев, указанных ниже, эти переменные обычно должны рассматриваться как только для чтения для кода приложения и пользователей.- auto_path
- Если установлено, то оно должно содержать допустимый список Tcl, задающий каталоги для поиска во время операций автозагрузки (включая файлы индекса пакетов при использовании обработчика по умолчанию package unknown). Эта переменная инициализируется во время запуска и содержит, в порядке: каталоги, указанные в переменной среды TCLLIBPATH, каталог, указанный глобальной переменной tcl_library, родительский каталог tcl_library, каталоги, указанные в переменной tcl_pkgPath. Дополнительные места для поиска файлов и индексов пакетов обычно добавляются в эту переменную с помощью lappend.
Существуют дополнительные переменные, связанные с управлением пакетами. Более подробная информация приведена в разделе VARIABLES руководства library.
- env
- Эта переменная поддерживается Tcl как массив, элементы которого представляют переменные среды процесса. Чтение элемента вернёт значение соответствующей переменной среды. Установка элемента массива модифицирует соответствующую переменную среды или создаёт новую, если она ещё не существует. Удаление элемента env удалит соответствующую переменную среды. Изменения в массиве env повлияют на среду, передаваемую дочерним процессам командами, такими как exec. Если весь массив env удалён, Tcl прекратит отслеживание доступа к env и не будет обновлять переменные среды.
В Windows переменные среды PATH и COMSPEC в любом регистре автоматически преобразуются в верхний регистр. Например, переменная PATH может быть экспортирована операционной системой как «path», «Path», «PaTh» и т. д., что заставляет код Tcl иначе простого поддерживать много особых случаев. Все остальные переменные среды, унаследованные Tcl, остаются неизменными. Установка переменной массива env в пустую строку эквивалентна её удалению, так как это поведение базовой операционной системы Windows. Следует отметить, что полагаться на существующую и пустую переменную среды в Windows не сработает и не рекомендуется для кроссплатформенного использования.
Следующие элементы env являются специфическими для Tcl:
- env(HOME)
- Эта переменная среды, если установлена, указывает на расположение каталога, рассматриваемого в качестве домашнего каталога текущего пользователя, и в который команда cd без аргументов или только с аргументом «~» переместит текущую директорию. Большинство платформ по умолчанию устанавливают это значение корректно; обычно его не нужно устанавливать кодом пользователя.
- env(TCL_LIBRARY)
- Если установлена, то она указывает на расположение каталога, содержащего скрипты библиотеки (значение этой переменной будет присвоено переменной tcl_library и, следовательно, возвращено командой info library). Если эта переменная не установлена, используется значение по умолчанию.
Обратите внимание, что эту переменную среды обычно не следует устанавливать.
- env(TCLLIBPATH)
- Если установлена, то она должна содержать допустимый список Tcl, задающий каталоги для поиска во время операций автозагрузки. Каталоги должны быть указаны в формате Tcl, используя «/» в качестве разделителя пути, независимо от платформы. Эта переменная используется только при инициализации переменной auto_path.
- env(TCL_TZ), env(TZ)
- Эти переменные задают часовой пояс по умолчанию, используемый для анализа и форматирования времени и дат в команде clock. На многих платформах переменная среды TZ настраивается операционной системой.
- env(LC_ALL), env(LC_MESSAGES), env(LANG)
- Эти переменные среды используются пакетом msgcat для определения локали, используемой для форматирования сообщений.
- env(TCL_INTERP_DEBUG_FRAME)
- Если существует, она имеет тот же эффект, что и выполнение interp debug {} -frame 1 как первой команды каждого нового интерпретатора Tcl.
- errorCode
- Эта переменная содержит значение возвращаемого параметра -errorcode, установленного последней произошедшей ошибкой в этом интерпретаторе. Это значение списка представляет дополнительную информацию об ошибке в формате, удобном для обработки программами. Первый элемент списка идентифицирует общий класс ошибок и определяет формат остальной части списка. Tcl core использует следующие форматы возвращаемого параметра -errorcode; отдельные приложения могут определять дополнительные форматы.
- ARITH code msg
- Этот формат используется при возникновении арифметической ошибки (например, при попытке деления нуля на ноль в команде expr). Code определяет точную ошибку, а msg предоставляет удобочитаемое описание ошибки. Code будет либо DIVZERO (для попытки деления на ноль), DOMAIN (если аргумент выходит за пределы области определения функции, например acos(-3)), IOVERFLOW (для переполнения целых чисел), OVERFLOW (для переполнения чисел с плавающей точкой) или UNKNOWN (если причина ошибки не может быть определена).
Обнаружение этих ошибок частично зависит от базового оборудования и системных библиотек.
- CHILDKILLED pid sigName msg
- Этот формат используется, когда дочерний процесс был убит из-за сигнала. Элемент pid будет идентификатором процесса (в десятичной системе). Элемент sigName будет символическим именем сигнала, который привёл к завершению процесса; он будет одним из имён из файла заголовков signal.h, например, SIGPIPE. Элемент msg будет коротким удобочитаемым сообщением, описывающим сигнал, например, «запись в трубу без читателей» для SIGPIPE.
- CHILDSTATUS pid code
- Этот формат используется, когда дочерний процесс завершился с ненулевым кодом завершения. Элемент pid будет идентификатором процесса (в десятичной системе), а элемент code будет кодом завершения, возвращённым процессом (также в десятичной системе).
- CHILDSUSP pid sigName msg
- Этот формат используется, когда дочерний процесс был приостановлен из-за сигнала. Элемент pid будет идентификатором процесса в десятичной системе. Элемент sigName будет символическим именем сигнала, который привёл к приостановке процесса; это будет одно из имён из файла заголовков signal.h, например, SIGTTIN. Элемент msg будет коротким удобочитаемым сообщением, описывающим сигнал, например, «чтение из фонового tty» для SIGTTIN.
- NONE
- Этот формат используется для ошибок, где дополнительная информация об ошибке, кроме сообщения, возвращённого с ошибкой, недоступна. В этих случаях возвращаемый параметр -errorcode будет содержать список, содержащий один элемент, содержимое которого NONE.
- POSIX errName msg
- Если первый элемент POSIX, то ошибка произошла во время вызова ядра POSIX. Элемент errName будет содержать символическое имя ошибки, которая произошла, например, ENOENT; это будет одно из значений, определённых в файле заголовков errno.h. Элемент msg будет удобочитаемым сообщением, соответствующим errName, например, «файл или директория не найдены» для ENOENT.
- TCL ...
- Указывает на какую-либо проблему, связанную с самим Tcl, например, неудачу при поиске канала или переменной.
Для установки возвращаемого параметра -errorcode приложения должны использовать библиотечные процедуры, такие как Tcl_SetObjErrorCode, Tcl_SetReturnOptions и Tcl_PosixError, или могут вызвать параметр -errorcode команды return. Если ни один из этих методов установки кода ошибки не был использован, интерпретатор Tcl сбросит переменную до NONE после следующей ошибки.
- errorInfo
- Эта переменная содержит значение возвращаемого параметра -errorinfo, установленного последней произошедшей ошибкой в этом интерпретаторе. Это строковое значение будет содержать одну или несколько строк, идентифицирующих команды и процедуры Tcl, которые выполнялись при возникновении последней ошибки. Его содержимое имеет вид стека вызовов, показывающего различные вложенные команды Tcl, которые были вызваны во время возникновения ошибки.
- tcl_library
- Эта переменная содержит имя каталога, содержащего системную библиотеку скриптов Tcl, например, используемых для автозагрузки. Значение этой переменной возвращается командой info library. См. запись руководства library для подробностей о предоставляемых возможностях библиотеки скриптов Tcl. Обычно каждое приложение или пакет будет иметь свою собственную библиотеку скриптов для приложений помимо библиотеки скриптов Tcl; каждое приложение должно установить глобальную переменную с именем, подобным $app_library (где app — имя приложения) для хранения сетевого имени файла каталога библиотеки этого приложения. Начальное значение tcl_library устанавливается при создании интерпретатора путём поиска в нескольких каталогах до тех пор, пока не будет найден каталог, содержащий соответствующий скрипт запуска Tcl. Если существует переменная среды TCL_LIBRARY, то каталог, который она указывает, проверяется в первую очередь. Если переменная среды TCL_LIBRARY не установлена или не ссылается на соответствующий каталог, Tcl проверяет несколько других каталогов, основываясь на встроенном значении по умолчанию, расположении исполняемого файла, содержащего приложение, и текущем рабочем каталоге.
- tcl_patchLevel
- При создании интерпретатора Tcl инициализирует эту переменную, которая содержит строку, задающую текущий номер патча для Tcl, например, 8.4.16 для Tcl 8.4 с шестнадцатью официальными патчами или 8.5b3 для третьей бета-версии Tcl 8.5. Значение этой переменной возвращается командой info patchlevel.
- tcl_pkgPath
- Эта переменная содержит список каталогов, указывающих, где обычно устанавливаются пакеты. Она не используется в Windows. Она обычно содержит одну или две записи; если она содержит две записи, то первая обычно является каталогом для платформозависимых пакетов (например, двоичных файлов общих библиотек), а вторая — обычно каталогом для платформонезависимых пакетов (например, файлов скриптов). Обычно пакет устанавливается как подкаталог одного из записей в переменной tcl_pkgPath. Каталоги в переменной tcl_pkgPath по умолчанию включаются в переменную auto_path, поэтому они и их непосредственные подкаталоги автоматически просматриваются при командах package require. Примечание: tcl_pkgPath не предназначена для модификации приложением. Её значение добавляется к auto_path при запуске; изменения в tcl_pkgPath не отражаются в auto_path. Если вы хотите, чтобы Tcl искал дополнительные каталоги для пакетов, вы должны добавить имена этих каталогов в auto_path, а не в tcl_pkgPath.
- tcl_platform
- Это ассоциативный массив, элементы которого содержат информацию о платформе, на которой выполняется приложение, такую как имя операционной системы, её текущая версия и набор инструкций процессора. Перечисленные ниже элементы всегда определены, но могут иметь пустые значения, если Tcl не смог получить соответствующую информацию. Кроме того, расширения и приложения могут добавлять дополнительные значения в массив. Предопределённые элементы:
- byteOrder
- Нативный порядок байтов этой машины: littleEndian или bigEndian.
- debug
- Если эта переменная существует, то интерпретатор был скомпилирован и связан с C-средой выполнения, включенной для отладки. Эта переменная будет существовать только в Windows, чтобы разработчики расширений могли указать, какой пакет загрузить в зависимости от используемой библиотеки C-среды выполнения. Это не означает, что этот модуль содержит символы.
- engine
- Имя реализации языка Tcl. При первом создании интерпретатора эта переменная всегда устанавливается в строку Tcl.
- machine
- Набор инструкций, выполняемый этой машиной, например, intel, PPC, 68k или sun4m. На UNIX-машинах это значение возвращается командой uname -m.
- os
- Имя операционной системы, работающей на этой машине, например, Windows NT или SunOS. На UNIX-машинах это значение возвращается командой uname -s.
- osVersion
- Номер версии операционной системы, работающей на этой машине. На UNIX-машинах это значение возвращается командой uname -r.
- pathSeparator
- Символ, который следует использовать для разделения переменных окружения типа PATH на соответствующий список имён каталогов.
- platform
- windows или unix. Это идентифицирует общую операционную среду машины.
- pointerSize
- Эта переменная задаёт размер указателя нативной машины в байтах (строго говоря, она равна результату вычисления sizeof(void*) в C).
- threaded
- Если эта переменная существует, то интерпретатор был скомпилирован с поддержкой потоков.
- user
- Это идентифицирует текущего пользователя на основе доступной на платформе информации о входе в систему. Это значение берётся из системных вызовов getuid() и getpwuid() на Unix и из системного вызова GetUserName() на Windows.
- wordSize
- Это даёт размер слова нативной машины в байтах (строго говоря, оно равно результату вычисления sizeof(long) в C).
- tcl_precision
- Эта переменная управляет количеством цифр, генерируемых при преобразовании чисел с плавающей точкой в строки. По умолчанию она равна 0. Приложениям не следует изменять это значение; оно предоставляется для совместимости со старым кодом.
- Значение по умолчанию 0 является особым, означающим, что Tcl должен преобразовывать числа, используя как можно меньше цифр, сохраняя при этом различие любого числа с плавающей точкой от его ближайших соседей. Это отличается от использования произвольно большого значения для tcl_precision, так как неточное число, такое как 1.4, будет преобразовано как 1.4, а не как 1.3999999999999999, даже если последнее ближе к точному значению двоичного числа.
- Если tcl_precision не равна нулю, то при преобразовании Tcl числа с плавающей точкой он создаёт десятичное представление не более чем с tcl_precision значащими цифрами; результат может быть короче, если более короткий результат точно представляет исходное число. Если ни один результат, имеющий не более tcl_precision цифр, не является точным представлением исходного числа, выбирается тот, который наиболее близок к исходному числу. Если исходное число находится точно между двумя равноточными десятичными представлениями, выбирается то, которое имеет чётное значение для младшей значащей цифры; например, если tcl_precision равно 3, то 0.3125 будет преобразовано в 0.312, а не в 0.313, а 0.6875 будет преобразовано в 0.688, а не в 0.687. Любые строки из последующих нулей удаляются.
- Значение tcl_precision, равное 17 цифрам, является «идеальным» для чисел с плавающей точкой IEEE, так как оно позволяет преобразовывать числа двойной точности в строки и обратно в двоичную форму без потери информации. По этой причине вы часто видите его в устаревшем коде, который должен работать в версиях Tcl до 8.5. Это больше не рекомендуется; как указано выше, значение по умолчанию (ноль) предпочтительнее.
- Все интерпретаторы в потоке используют одно и то же значение tcl_precision: изменение его в одном интерпретаторе повлияет на все другие интерпретаторы. Безопасные интерпретаторы не могут изменять переменную.
- Допустимые значения для tcl_precision находятся в диапазоне от 0 до 17.
- tcl_rcFileName
- Эта переменная используется во время инициализации для указания имени файла начальной загрузки пользователя. Если она установлена приложением, то код начальной загрузки Tcl проверит существование этого файла и загрузит его, если он существует. Например, для wish переменная устанавливается в ~/.wishrc для Unix и ~/wishrc.tcl для Windows.
- tcl_traceCompile
- Значение этой переменной может быть установлено для управления объёмом информации отслеживания, отображаемой во время компиляции байткода. По умолчанию tcl_traceCompile равно нулю, и информация не отображается. Установка tcl_traceCompile в 1 генерирует однострочный сводный отчёт в stdout всякий раз, когда процедура или команда верхнего уровня компилируются. Установка её в 2 генерирует подробный список в stdout байткодовых инструкций, генерируемых во время каждой компиляции. Эта переменная полезна при отслеживании предполагаемых проблем с компилятором Tcl.
- Эта переменная и функциональность существуют только в том случае, если TCL_COMPILE_DEBUG была определена во время компиляции Tcl.
- tcl_traceExec
- Значение этой переменной можно установить для управления объёмом информации отслеживания, отображаемой во время выполнения байткода. По умолчанию tcl_traceExec равно нулю, и информация не отображается. Установка tcl_traceExec в 1 генерирует однострочный отчёт в stdout при каждом вызове Tcl-процедуры. Установка её в 2 генерирует строку вывода всякий раз, когда вызывается любая Tcl-команда, содержащая имя команды и её аргументы. Установка её в 3 генерирует подробный отчёт, показывающий результат выполнения каждой байткодовой инструкции. Обратите внимание, что при значениях tcl_traceExec 2 или 3 команды, такие как set и incr, которые полностью заменены последовательностью байткодовых инструкций, не отображаются. Установка этой переменной полезна при поиске предполагаемых проблем с компилятором байткода и интерпретатором.
- Эта переменная и функциональность существуют только в том случае, если TCL_COMPILE_DEBUG была определена во время компиляции Tcl.
- tcl_wordchars
- Значение этой переменной — регулярное выражение, которое можно установить для управления тем, что считается «символами слова», например, при выборе слова двойным щелчком мыши в тексте в Tk. Оно зависит от платформы. В Windows по умолчанию оно равно \S, что означает любой символ, кроме символа Unicode-пробела. В противном случае по умолчанию оно равно \w, что означает любой символ Unicode-слова (цифра, буква или знак подчёркивания).
- tcl_nonwordchars
- Значение этой переменной — регулярное выражение, которое можно установить для управления тем, что считается «несимволами слова», например, при выборе слова двойным щелчком мыши в тексте в Tk. Оно зависит от платформы. В Windows по умолчанию оно равно \s, что означает любой символ Unicode-пробела. В противном случае по умолчанию оно равно \W, что означает любой символ, кроме символа Unicode-слова (цифра, буква или знак подчёркивания).
- tcl_version
- При создании интерпретатора Tcl инициализирует эту переменную, чтобы сохранить номер версии этой версии Tcl в формате x.y. Изменения в x представляют собой значительные изменения с вероятными несовместимостями, а изменения в y представляют собой небольшие улучшения и исправления ошибок, сохраняющие обратную совместимость. Значение этой переменной возвращается командой info tclversion.
Другие глобальные переменные
Следующие переменные гарантированно существуют только в исполняемых файлах tclsh и wish; библиотека Tcl их не определяет, но многие среды Tcl их определяют.- argc
- Количество аргументов для tclsh или wish.
- argv
- Список аргументов Tcl для tclsh или wish.
- argv0
- Скрипт, который tclsh или wish начали выполнять (если он был указан), или, иначе, имя, под которым tclsh или wish был вызван.
- tcl_interactive
- Содержит 1, если tclsh или wish работает в интерактивном режиме (не был указан скрипт и стандартный ввод является терминальным устройством), 0 в противном случае.
Примеры
Чтобы добавить каталог в список мест, просматриваемых командой package require, например, из-за некоторых приложений, используемых пакетов, переменная auto_path должна быть обновлена:lappend ::auto_path [file join [pwd] "theLibDir"]
Простой, но не очень надёжный способ обработки аргументов командной строки вида «-foo 1 -bar 2» — это загрузить их в массив после загрузки исходных настроек:
array set arguments {-foo 0 -bar 0 -grill 0}
array set arguments $::argv
puts "foo is $arguments(-foo)"
puts "bar is $arguments(-bar)"
puts "grill is $arguments(-grill)" Глобальная переменная argv0 может быть использована (в сочетании с командой info script) для определения того, выполняется ли текущий скрипт как основной скрипт или загружен как библиотека. Это полезно, потому что позволяет использовать один и тот же скрипт как библиотеку, так и демонстрацию этой библиотеки:
if {$::argv0 eq [info script]} {
# running as: tclsh example.tcl
} else {
package provide Example 1.0
} См. также
eval, library, tclsh, tkvars, wish
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/tclvars.htm
Licensed under Tcl/Tk terms
https://www.tcl.tk/man/tcl/TclCmd/tclvars.htm