Фактический код / хэш более сложен.Хеш имеет вид: $ revolution_hash {output} {oor} {$ colo} {$ type} {$ hostname} {file} {$ filename} =
Как уже говорили другие, когда вы спрашиваете о существовании $foo{bar}{fubar}
, Perl автоматически создает $foo{bar}
, чтобы проверить, существует ли $foo{bar}{fubar}
.Если вы хотите предотвратить это, вы должны проверить, существует ли $foo{bar}
, и если да, то проверить, существует ли $foo{bar}{fubar}
.
Однако, что привлекло мое внимание, был ваш семислойный хэш.Когда ваши структуры данных начинают становиться такими сложными, вы действительно должны использовать Perl Object Oriented Coding.Я знаю, что многие напуганы ориентированным на Perl программированием, но Perl, вероятно, является одним из самых простых языков для людей при получении ООП.
Если ни для чего иного, вы используете ООП по той же причине, что и вы.используйте use strict;
.Когда я use strict;
, Perl легко подхватит, где я использовал $foobar
в качестве переменной в одном месте, но затем назову его $fubar
в другом месте.Вы теряете эту защиту со сложными структурами данных.Например, вы можете поместить $rotation_hash{output}{oor}
в одном месте, но $rotation_hash{oor}{output}
в другом месте, и use strict
этого не поймет.Но если вы объявляете объекты с помощью package
и используете подпрограммы в качестве методов и конструкторов, вы получаете это обратно.
Объектно-ориентированное проектирование также поможет вам избежать необходимости отслеживать структуру данных.Объекты обрабатывают их для вас, и вы можете сосредоточиться на своем кодировании.И вам не нужно создавать несколько файлов.Вы можете просто прикрепить определения объектов внизу вашего файла.
В документацию по Perl включены некоторые отличные учебные пособия .Если вы не знакомы с ООП Perl, вам следует пройти уроки и попробовать.