Spec-Zone.ru › Perl 5.38

Символ

СОДЕРЖАНИЕ

  • ИМЯ
  • СИНОПСИС
  • ОПИСАНИЕ
  • ОШИБКИ

ИМЯ

Символ - управление символами Perl и их именами

СИНОПСИС

use Symbol;

$sym = gensym;
open($sym, '<', "filename");
$_ = <$sym>;
# etc.

ungensym $sym;      # no effect

# replace *FOO{IO} handle but not $FOO, %FOO, etc.
*FOO = geniosym;

print qualify("x"), "\n";              # "main::x"
print qualify("x", "FOO"), "\n";       # "FOO::x"
print qualify("BAR::x"), "\n";         # "BAR::x"
print qualify("BAR::x", "FOO"), "\n";  # "BAR::x"
print qualify("STDOUT", "FOO"), "\n";  # "main::STDOUT" (global)
print qualify(\*x), "\n";              # returns \*x
print qualify(\*x, "FOO"), "\n";       # returns \*x

use strict refs;
print { qualify_to_ref $fh } "foo!\n";
$ref = qualify_to_ref $name, $pkg;

use Symbol qw(delete_package);
delete_package('Foo::Bar');
print "deleted\n" unless exists $Foo::{'Bar::'};

ОПИСАНИЕ

Symbol::gensym создаёт анонимный глобальный указатель и возвращает ссылку на него. Такая ссылка на глобальный указатель может использоваться как дескриптор файла или каталога.

Для обратной совместимости со старыми реализациями, которые не поддерживали анонимные глобальные указатели, также предоставлен Symbol::ungensym. Но он ничего не делает.

Symbol::geniosym создаёт анонимный дескриптор ввода-вывода. Его можно назначить в существующий глобальный указатель, не затрагивая не-IO части глобального указателя.

Symbol::qualify преобразует имена символов без квалификатора в имена квалифицированных переменных (например, "myvar" -> "MyPackage::myvar"). Если ему задан второй параметр, qualify использует его в качестве стандартного пакета; в противном случае, он использует пакет вызывающего его модуля. Независимо от этого, имена глобальных переменных (например, "STDOUT", "ENV", "SIG") всегда квалифицируются как "main::".

Квалификация применяется только к именам символов (строкам). Ссылки остаются неизменными с предположением, что они являются ссылками на глобальные указатели, которые по своей природе квалифицированы.

Symbol::qualify_to_ref аналогичен Symbol::qualify, за исключением того, что он возвращает ссылку на глобальный указатель, а не имя символа, поэтому вы можете использовать результат, даже если use strict 'refs' активен.

Symbol::delete_package очищает весь пространство имён пакета. Обратите внимание, что эта функция не экспортируется по умолчанию — вам может потребоваться явно импортировать её.

ОШИБКИ

Symbol::delete_package немного слишком мощный. Он удаляет каждый символ, который находится в указанном пакете. Поскольку Perl по причинам производительности не выполняет поиск в таблице символов каждый раз, когда вызывается функция или обращается к глобальной переменной, некоторый код, который уже загружен и использует символы в пакете Foo, может перестать работать после удаления Foo, даже если вы перезагрузите модуль Foo после этого.

© 1993–2023 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.38.0/Symbol

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API