Вот документация для вызова метода add_write_handler()
.Там написано:
add_write_handler ($ re, $ code_ref)
Этот метод используется для расширения метода write () Excel :: Writer :: XLSXдля обработки пользовательских данных.
И позже он говорит:
Метод add_write_handler()
принимает два аргумента, $re
, регулярное выражение для сопоставления входящих данныхи $code_ref
функция обратного вызова для обработки сопоставленных данных
Итак, здесь у вас есть вызов метода, который принимает два аргумента.Первый - это регулярное выражение, которое сообщает объекту, для какого типа данных используется этот новый обработчик записи.Вторая - это ссылка на подпрограмму, которая должна использоваться в качестве обработчика записи для данных, соответствующих регулярному выражению.
Имеется регулярное выражение qr[\w]
.Фактический бит регулярного выражения это \w
.И это просто означает «соответствовать символу слова».qr
предназначен для компиляции строки в регулярное выражение, а [ ... ]
- просто разделитель для строки регулярного выражения (qr/.../
- это один из классов операторов Perl, который позволяет вам использовать практически любой символ, который вы хотите использовать в качестве разделителя.).
Итак, если ваш объект вызывается для записи некоторых данных, содержащих хотя бы один символ слова, используется подпрограмма, заданная в качестве второго аргумента.Но мы берем ссылку на подпрограмму.
В другом месте вашего кода вы определяете подпрограмму store_string_widths()
.Подпрограммы в Perl очень похожи на переменные, и это означает, что у них есть собственный сигил.Символ для подпрограммы - &
(например, $
для скаляра и @
для массивов).Вам очень редко нужен &
в современном Perl-коде, поэтому вы не увидите, чтобы он использовался очень часто.Одно из мест, где он все еще используется, - это когда мы берем ссылку на подпрограмму.Вы берете ссылку на любую переменную, помещая косую черту перед полным именем переменной (например, \@array
или \%hash
), и подпрограммы ничем не отличаются.Так что \&store_string_widths
означает «получить ссылку на подпрограмму с именем store_string_widths()
».
Вы говорите, что это ваша первая Perl-программа.Я должен сказать, что это кажется немного амбициозным для вашего первого кода Perl.Я вообще не рассматриваю ссылки в моем двухдневном курсе для начинающих, а на своем промежуточном курсе я охватываю большинство ссылок, но упоминания о подпрограммах упоминаются попутно.Если вы можете понять ссылки достаточно, чтобы все это заработало, то, я думаю, у вас все хорошо.