В скомпилированных языках переменные не имеют имени. Имя, которое вы видите в коде, представляет собой уникальный идентификатор, связанный с некоторым числовым смещением. В идентификаторе, подобном message_2
, '2'
служит только для того, чтобы сделать его уникальным идентификатором. Любой может сказать, что вы можете сделать три переменные: message_125
, message_216
и message_343
. Пока вы можете сказать, что вы должны вкладывать в то, что они работают так же хорошо, как message_1
...
«Имя» переменной предназначено только для того, чтобы вы оставляли их прямыми во время написания кода.
Динамические языки добавляют возможность, не удаляя таблицы символов. Но таблица символов - это просто связь имени со значением. Поскольку Perl предлагает вам списки и хэши так дешево, нет необходимости использовать программный / логистический метод отслеживания переменных для обеспечения гибкого доступа во время выполнения.
Скорее всего, если вы видите списки имен @message1
, @message2
, ... - где элементы отличаются только по порядку ссылок, эти имена так же хороши: $message[1]
, $message[2]
, ....
Кроме того, поскольку таблицы символов обычно отображаются из имени в смещение (либо в стеке, либо в куче), это на самом деле не намного больше, чем пара ключ-значение, которую вы найдете в хэше . . Таким образом, хеши работают так же хорошо, чтобы искать более четкие имена.
$h{messages} = [];
$h{replies} = [];
Я имею в виду, на самом деле, если вы хотите, вы можете хранить все, что вы помещаете в лексическую переменную, в один хеш для области, если вы не возражаете написать: $h{variable_name}
для всего. Но вы не получите преимущества неявного управления областями Perl, и программисты предпочитают неявное управление областями в разных языках.
Perl допускает символические манипуляции, но с годами динамические языки обнаружили, что это смешанное благословение. Но в Perl у вас есть обе «перспективы», чтобы дать им имя. Поскольку вы можете определить, какой код в скомпилированном языке, вероятно, будет работать лучше, чем динамический язык, было определено, что без ошибок можно использовать «скомпилированную перспективу» для большего количества вещей: так, как вы можете видеть с доступностью смещения и посмотрите скомпилированное поведение, данное вам в ядре Perl, нет причин возиться с таблицей символов, если вам не нужно.
Динамическое создание массива так же просто, как: []
. Присвоить это место в памяти, когда мы не знаем, сколько мы хотим сохранить, так же просто, как:
push @message, [];
И создать список списков одновременно так же просто, как:
@message = map { [] } 1..$num_lists;
для некоторого указанного значения в $num_lists
.