На этом шаге мы рассмотрим таблицы символов.
С каждым пакетом связана таблица символов. Она представляет собой хеш-массив, имя которого образовано из имени пакета, за которым следуют два двоеточия. Например, таблица символов пакета main хранится в хеш-массиве %main::. Ключами этого хеш-массива являются идентификаторы переменных, определенных в пакете, значениями - значения типа typeglob, указывающие на гнездо, состоящее из одноименных переменных разных типов: скаляр, массив, хеш-массив, функция, дескриптор файла или каталога.
Тип typeglob, с которым мы уже сталкивались - это внутренний тип данных языка Perl, который используется для того, чтобы при помощи одной переменной типа typeglob сослаться на все одноименные переменные разных типов. Признаком типа typeglob является символ "*". Если переменной типа typeglob присвоить значение другой переменной типа
typeglob: *у = *х;
*у = \$х;
Ключами в хеш-массиве таблицы символов являются все идентификаторы, определенные в пакете. Поэтому можно получить данные о переменных всех типов, определенных в пакете, проверяя значения элементов этого хеш-массива. Например, чтобы вывести имена всех переменных, определенных в пакете main, можно использовать следующий код.
#! perl -w
my ($key, $item);
print "Таблица символов пакета main:\n";
for $key (sort keys %main::) 
{
  local *myglob = $main::{$key};
  print "определен скаляр \$$key  = $myglob\n" if defined $myglob;
  if (defined @myglob) 
  {
    print "определен массив \@$key  :\n"; 
    for $item (0..$#myglob)
    {
      print " \$$key [$item]  = $myglob[$item]\n";
    }
  }
 if (defined %myglob) 
 {
   print "определен хеш-массив \%$key  :\n"; 
   for $item (sort keys %myglob) 
   {
     print "\$$key {$item}  = $myglob{$item} \n";
   }
   print "определена функция $key()\n" if defined &myglob;
 }
Результат выполнения скрипта приведен на рисунке 1:

Рис.1. Результат работы скрипта
perl.exe perl125_1.pl > 11.txt
При помощи типа typeglob можно создавать скалярные псевдоконстанты. Например, после присваивания
*РI = \3.14159265358979;
В таблицу символов пакета, отличного от main, входят только идентификаторы, начинающиеся с буквы или символа подчеркивания. Все остальные идентификаторы относятся к пакету main. Кроме того, к нему относятся следующие начинающиеся с буквы идентификаторы: STDIN, STDOUT, STDERR, ARGV, ARGVOUT, ENV, INC, SIGc. Например, при обращении внутри некоторого пакета pack к хеш-массиву %ENV подразумевается специальный хеш-массив %ENV основного пакета main, даже если имя main не используется в качестве префикса для обозначения принадлежности идентификатора ENV.
На следующем шаге мы рассмотрим конструктор и деструктор.