Структура Perl языка программирования включает в себя как синтаксические правила языка и общие способы , в которых организуются программы. Философия дизайна Perl выражается в часто цитируемом девизе « Есть несколько способов сделать это ». Как многопарадигмальный язык с динамической типизацией Perl обеспечивает большую степень гибкости при разработке программ. Perl также поощряет модуляризацию; это было связано с компонентной структурой проектирования его корней Unix [ когда? ] , [1] и отвечает за размер CPANarchive, поддерживаемый сообществом репозиторий, содержащий более 100 000 модулей. [2]
Базовый синтаксис
В Perl минимальную программу Hello World можно записать следующим образом:
print "Hello, World! \ n"
Это выводит на строку Hello, World! и новая строка , символически выраженная n
символом, интерпретация которого изменяется предыдущим escape-символом (обратная косая черта). Начиная с версии 5.10, новая встроенная функция 'say' [3] дает тот же эффект еще проще:
сказать "Привет, мир!"
Вся программа Perl также может быть указана в качестве параметра командной строки для Perl, поэтому ту же программу можно также запустить из командной строки (пример показан для Unix):
$ perl - e 'print "Hello, World! \ n"'
Каноническая форма программы немного более подробна:
#! / usr / bin / perl print "Hello, World! \ n" ;
Символ решетки вводит комментарий в Perl, который длится до конца строки кода и игнорируется компилятором (кроме Windows). Используемый здесь комментарий имеет особый вид: он называется строкой shebang . Это указывает Unix-подобным операционным системам найти интерпретатор Perl, что позволяет вызывать программу без явного упоминания perl
. (Обратите внимание, что в системах Microsoft Windows программы Perl обычно вызываются путем связывания .pl
расширения с интерпретатором Perl. Чтобы справиться с такими обстоятельствами, perl
обнаруживает строку shebang и анализирует ее на наличие переключателей. [4] )
Вторая строка в канонической форме включает точку с запятой, которая используется для разделения операторов в Perl. При наличии только одного оператора в блоке или файле разделитель не нужен, поэтому его можно опустить в минимальной форме программы или, в более общем смысле, из последнего оператора в любом блоке или файле. Каноническая форма включает его, потому что каждый оператор обычно завершается, даже если в этом нет необходимости, поскольку это упрощает редактирование: код может быть добавлен или перемещен от конца блока или файла без необходимости отрегулируйте точку с запятой.
Версия 5.10 Perl представляет say
функцию, которая неявно добавляет символ новой строки к своему выводу, делая минимальную программу "Hello World" еще короче:
используйте 5.010 ; # должен присутствовать для импорта новых функций 5.10, обратите внимание, что это 5.010, а не 5.10 say 'Hello, World!'
Типы данных
Perl имеет несколько основных типов данных . Чаще всего используются и обсуждаются скаляры , массивы , хэши , дескрипторы файлов и подпрограммы :
Тип | Сигил | Пример | Описание |
---|---|---|---|
Скалярный | $ | $ foo | Одно значение; это может быть число, строка , дескриптор файла или ссылка . |
Множество | @ | @foo | Упорядоченный набор скаляров. |
Хеш | % | % foo | Карта от строк к скалярам; строки называются ключами , а скаляры - значениями . Также известен как ассоциативный массив . |
Дескриптор файла | никто | $ foo или FOO | Непрозрачное представление открытого файла или другой цели для чтения, записи или того и другого. |
Подпрограмма | & | & foo | Фрагмент кода, который может передавать аргументы, выполняться и возвращать данные. |
Typeglob | * | * фу | Запись таблицы символов для всех типов с именем 'foo'. |
Скалярные значения
Строковые значения (литералы) должны быть заключены в кавычки. Заключение строки в двойные кавычки позволяет значениям переменных, имена которых появляются в строке, автоматически заменять имя переменной (или интерполировать ) в строке. Заключение строки в одинарные кавычки предотвращает интерполяцию переменных.
Например, если $name
это "Jim"
:
- затем
print("My name is $name")
напечатает"My name is Jim"
(интерполяция в двойных кавычках), - но
print('My name is $name')
будет печатать"My name is $name"
(без интерполяции в одинарных кавычках).
Чтобы включить двойные кавычки в строку, поставьте перед ней обратную косую черту или заключите строку в одинарные кавычки. Чтобы включить одинарную кавычку, поставьте перед ней обратную косую черту или заключите строку в двойные кавычки.
Строки также могут быть указаны с q
и qq
котировка подобных операторов:
'this'
иq(this)
идентичны,"$this"
иqq($this)
идентичны.
Наконец, многострочные строки можно определить с помощью документов :
$ Multilined_string = << EOF ; Это моя многострочная строка, которую я завершаю словом «EOF». EOF
Числа (числовые константы) не требуют цитирования. Perl преобразует числа в строки и наоборот в зависимости от контекста, в котором они используются. Когда строки преобразуются в числа, завершающие нечисловые части строк отбрасываются. Если ни одна из ведущих частей строки не является числовой, строка будет преобразована в число 0. В следующем примере строки $n
и $m
обрабатываются как числа. Этот код печатает цифру «5». Значения переменных остаются прежними. Обратите внимание, что в Perl +
всегда используется оператор сложения чисел. Оператор конкатенации строк - это точка.
$ n = '3 яблока' ; $ m = '2 апельсина' ; напечатайте $ n + $ m ;
Предусмотрены функции для округления дробных значений до целых значений: int
отрезает дробную часть до нуля; POSIX::ceil
и POSIX::floor
округлять всегда вверх и всегда вниз соответственно. Для преобразования числа в строку printf "%f"
или sprintf "%f"
четного округления используйте банковское округление .
Perl также имеет логический контекст, который он использует при оценке условных операторов. Все следующие значения в Perl считаются ложными:
$ false = 0 ; # число ноль $ false = 0.0 ; # число ноль в виде числа с плавающей запятой $ false = 0b0 ; # число ноль в двоичном формате $ false = 0x0 ; # число ноль в шестнадцатеричном формате $ false = '0' ; # нулевая строка $ false = "" ; # пустая строка $ false = (); # пустой список $ false = undef ; # Возвращаемое значение от UNDEF $ False = 2 - 3 + 1 # вычисляет значение 0, которая преобразуется в "0" , так что оно ложно
Все остальные (ненулевые) значения оцениваются как истинные. Это включает в себя нечетную буквальную строку с самоописанием «0, но истинно», которая на самом деле равна 0 как число, но истинно при использовании как логическое значение. Все нечисловые строки также имеют это свойство, но эта конкретная строка усекается Perl без числового предупреждения. Менее явной, но более концептуально переносимой версией этой строки является «0E0» или «0e0», которая не полагается на символы, оцениваемые как 0, потому что «0E0» буквально равно нулю, умноженному на десять, в степени ноль. Пустой хеш {}
также верен; в этом контексте {}
не пустой блок, потому что perl -e 'print ref {}'
возвращается HASH
.
Вычисленные логические выражения также являются скалярными значениями. Документация не обещает, какое именно значение будет возвращено: истина или ложь. Многие логические операторы возвращают 1 для истинного значения и пустую строку для ложного. Функция defined () определяет, имеет ли переменная какое-либо значение. В приведенных выше примерах defined ($ false) истинно для всех значений, кроме undef .
Если требуется 1 или 0, явное преобразование может быть выполнено с помощью условного оператора :
мой $ real_result = $ boolean_result ? 1 : 0 ;
Значения массива
Значение массива (или список) задается путем перечисления его элементов, разделенных запятыми, заключенные в круглые скобки ( по крайней мере , в случае необходимости с помощью оператора старшинства).
@scores = ( 32 , 45 , 16 , 5 );
Оператор qw (), подобный кавычкам, позволяет определять список строк без ввода кавычек и запятых. Вместо круглых скобок можно использовать практически любой разделитель. Следующие строки эквивалентны:
@names = ( 'Билли' , 'Джо' , 'Джим-Боб' ); @names = qw (Билли Джо Джим-Боб) ;
Функция split возвращает список строк, которые отделены от строкового выражения с помощью строки-разделителя или регулярного выражения.
@scores = сплит ( '' , '32, 45,16,5' );
Доступ к отдельным элементам списка осуществляется путем указания числового индекса в квадратных скобках. Необходимо использовать скалярную сигилу . Подсписки (фрагменты массива) также можно указать, используя диапазон или список числовых индексов в скобках. В этом случае используется сигил массива. Например, $month[3]
is "April"
(первый элемент в массиве имеет значение индекса 0) и @month[4..6]
is ("May", "June", "July")
.
Хеш-значения
Программисты Perl могут инициализировать хэш (или ассоциативный массив ) из списка пар ключ / значение. Если ключи отделяются от значений с помощью =>
оператора (иногда называемого жирной запятой ), а не запятой, они могут быть не заключены в кавычки (barewords [5] ). Следующие строки эквивалентны:
% любимый = ( 'Джо' , «красный» , «Сэм» , «синий» ); % favourite = ( joe => 'красный' , sam => 'синий' );
Доступ к отдельным значениям в хэше осуществляется путем указания соответствующего ключа в фигурных скобках. $
Сигила идентифицирует элемент в качестве Accessed скаляра. Например, $ favourite {joe} означает «красный». Хэш также можно инициализировать, задав его значения индивидуально:
$ любимый { джо } = 'красный' ; $ любимый { сам } = 'синий' ; $ избранное { Оскар } = 'зеленый' ;
Доступ к нескольким элементам можно получить, используя @
вместо этого сигил (идентифицирующий результат в виде списка). Например, @favorite {'joe', 'sam'} равно ('красный', 'синий').
Файловые дескрипторы
Файловые дескрипторы обеспечивают доступ для чтения и записи к ресурсам. Чаще всего это файлы на диске, но также могут быть устройством, конвейером или даже скалярным значением.
Первоначально дескрипторы файлов можно было создавать только с помощью переменных пакета, используя соглашение ALL_CAPS, чтобы отличить его от других переменных. Perl 5.6 и новее также принимает скалярную переменную, которая будет установлена ( автоматически оживлена ) на ссылку на анонимный дескриптор файла вместо именованного дескриптора файла.
Значения Typeglob
Значение typeglob - это запись в таблице символов. Основное использование typeglobs - создание псевдонимов таблиц символов. Например:
* PI = \ 3.141592653 ; # создание постоянного скаляра $ PI * this = * that ; # создание псевдонимов для всех типов данных 'this' для всех типов данных 'that'
Функции массива
Количество элементов в массиве может быть определено либо путем оценки массива в скалярном контексте, либо с помощью $#
сигилы. Последний дает индекс последнего элемента в массиве, а не количество элементов. Выражения скаляр (@array) и ($ # array + 1) эквивалентны.
Хеш-функции
Есть несколько функций, которые работают с целыми хэшами. Функция keys принимает хэш и возвращает список своих ключей. Точно так же функция значений возвращает значения хэша. Обратите внимание, что ключи и значения возвращаются в последовательном, но произвольном порядке.
# Каждый вызов каждого из них возвращает следующую пару ключ / значение. # Все значения в конечном итоге будут возвращены, но их порядок # предсказать невозможно. while (( $ name , $ address ) = каждый % addressbook ) { print "$ name живет по адресу $ address \ n" ; }# Аналогично вышесказанному, но отсортированные в алфавитном порядке по каждому элементу мой $ next_name ( сортировать ключи % Addressbook ) { печать "$ next_name живет $ {$ Addressbook next_name} \ п" ; }
Структуры управления
Perl имеет несколько видов управляющих структур.
Он имеет блочно-ориентированные структуры управления, аналогичные тем, что в языках программирования C, JavaScript и Java . Условия заключены в круглые скобки, а контролируемые блоки - в фигурные скобки:
метка while ( cond ) {…} метка while ( cond ) {…} continue {…} метка для ( init-expr ; cond-expr ; incr-expr ) {…} метка foreach var ( список ) {…} метка foreach var ( список ) {…} продолжить {…}if ( cond ) {…}if ( cond ) {…} else {…}if ( cond ) {…} elsif ( cond ) {…} else {…}
Если контролируется только один оператор, модификаторы операторов обеспечивают более сжатый синтаксис:
заявление if cond ;заявление, если только cond ;заявление в то время как cond ;выписка до усл ;оператор для каждого списка ;
Логические операторы короткого замыкания обычно используются для воздействия на поток управления на уровне выражения:
expr и expr expr && expr expr или expr expr || expr
(Операторы «и» и «или» аналогичны операторам && и ||, но имеют более низкий приоритет , что упрощает их использование для управления целыми операторами.)
Ключевые слова управления потоком next
(соответствующие C continue
), last
(соответствующие C break
) return
, и redo
являются выражениями, поэтому их можно использовать с операторами короткого замыкания.
Perl также имеет две неявные конструкции цикла, каждая из которых имеет две формы:
results = grep {…} list results = grep expr , list results = map {…} list results = map expr , list.
grep
возвращает все элементы списка, для которых контролируемый блок или выражение оцениваются как истинные. map
оценивает контролируемый блок или выражение для каждого элемента списка и возвращает список результирующих значений. Эти конструкции обеспечивают простой функциональный стиль программирования .
Вплоть до выпуска 5.10.0 в Perl 5 не было оператора switch . Начиная с 5.10.0, доступен оператор многостороннего перехода с именем given
/ when
, который принимает следующую форму:
используйте v5.10; # должен присутствовать для импорта новых функций 5.10given ( expr ) {when ( cond ) {…} по умолчанию {…}}
Синтаксически эта структура ведет себя аналогично операторам switch в других языках, но с некоторыми важными отличиями. Самым большим из них является то, что в отличие от структур switch / case, операторы given / when прерывают выполнение после первого успешного перехода, а не ждут явно определенных команд прерывания. И наоборот, явные continue
s необходимы для имитации поведения переключения.
Для тех, кто не использует Perl 5.10, документация Perl описывает полдюжины способов достижения того же эффекта с помощью других структур управления. Также имеется модуль Switch, который обеспечивает функциональность по образцу родственного языка Raku . Он реализован с использованием исходного фильтра , поэтому его использование неофициально не рекомендуется. [6]
Perl включает goto label
оператор, но он используется редко. Ситуации, когда a требуется goto
на других языках, не так часто встречаются в Perl из-за широты возможностей управления потоком.
Также есть goto ⊂
оператор, выполняющий хвостовой вызов . Он завершает текущую подпрограмму и немедленно вызывает указанную sub
. Это используется в ситуациях, когда вызывающий может выполнять более эффективное управление стеком, чем сам Perl (обычно потому, что не требуется никаких изменений в текущем стеке), а при глубокой рекурсии хвостовой вызов может иметь существенное положительное влияние на производительность, поскольку он позволяет избежать накладные расходы на управление областью / стеком при возврате.
Подпрограммы
Подпрограммы определяются с помощью sub
ключевого слова и вызываются просто путем их именования. Если рассматриваемая подпрограмма еще не была объявлена, для ее вызова требуются скобки после имени функции или амперсанд ( & ) перед ним. Но использование & без круглых скобок также неявно передает аргументы текущей подпрограммы вызываемой, а использование & со скобками обходит прототипы.
# Вызов подпрограммы# Скобки здесь обязательны, если подпрограмма определена позже в коде foo (); & foo ; # (это тоже работает, но имеет другие последствия в отношении аргументов, передаваемых подпрограмме)# Определение подпрограммы sub foo { … }foo ; # Здесь круглые скобки не обязательны
Список аргументов может быть указан после имени подпрограммы. Аргументы могут быть скалярами, списками или хешами.
foo $ x , @y , % z ;
Параметры подпрограммы не нужно объявлять ни по номеру, ни по типу; фактически, они могут отличаться от звонка к звонку. Любая проверка параметров должна выполняться явно внутри подпрограммы.
Массивы расширяются до своих элементов; хэши расширяются до списка пар ключ / значение; и весь набор передается в подпрограмму как один плоский список скаляров.
Какие бы аргументы ни передавались, подпрограмма получает доступ к специальному массиву @_
. Элементы @_
являются ссылками на фактические аргументы; изменение элемента @_
изменяет соответствующий аргумент.
@_
Доступ к элементам можно получить, указав его обычным образом.
$ _ [ 0 ], $ _ [ 1 ]
Однако результирующий код может быть трудным для чтения, а параметры имеют семантику передачи по ссылке , что может быть нежелательным.
Одна распространенная идиома - присвоить @_
список именованных переменных.
мой ( $ x , $ y , $ z ) = @_ ;
Это обеспечивает мнемонические имена параметров и реализует семантику передачи по значению . my
Ключевое слово указывает на то, что следующие переменные лексической области видимости вмещающего блока.
Другая идиома - убрать параметры @_
. Это особенно часто встречается, когда подпрограмма принимает только один аргумент или для обработки $self
аргумента в объектно-ориентированных модулях.
мой $ x = сдвиг ;
Подпрограммы могут назначать @_
хэш для имитации именованных аргументов; это рекомендуется в Perl Best Practices для подпрограмм, которые, вероятно, когда-либо будут иметь более трех параметров. [7]
к югу function1 { моему % арг = @_ ; print "аргумент 'x' был '$ args {x}' \ n" ; } function1 ( x => 23 );
Подпрограммы могут возвращать значения.
возврат 42 , $ x , @y , % z ;
Если подпрограмма не завершается с помощью return
оператора, она возвращает последнее выражение, вычисленное в теле подпрограммы. Массивы и хэши в возвращаемом значении расширяются до списков скаляров, как и для аргументов.
Возвращенное выражение оценивается в контексте вызова подпрограммы; это может удивить неосторожных.
суб - лист { ( 4 , 5 , 6 ) } суб массив { @x = ( 4 , 5 , 6 ); @x }$ x = список ; # возвращает 6 - последний элемент списка $ x = array ; # возвращает 3 - количество элементов в списке @x = list ; # возвращает (4, 5, 6) @x = array ; # возвращает (4, 5, 6)
Подпрограмма может обнаружить контекст своего вызова с помощью wantarray
функции.
sub либо { return wantarray ? ( 1 , 2 ) : «Апельсины» ; }$ x = либо ; # возвращает "Апельсины" @x = либо ; # возвращает (1, 2)
Регулярные выражения
Язык Perl включает специализированный синтаксис для написания регулярных выражений (RE или регулярных выражений), а интерпретатор содержит механизм сопоставления строк с регулярными выражениями. Механизм регулярных выражений использует алгоритм поиска с возвратом , расширяя его возможности от простого сопоставления с образцом до захвата и подстановки строк. Механизм регулярных выражений основан на регулярном выражении, написанном Генри Спенсером .
Синтаксис регулярных выражений Perl изначально был взят из регулярных выражений Unix версии 8. Однако он разошелся до первого выпуска Perl и с тех пор расширился, чтобы включить гораздо больше функций. Много других языков и приложений в настоящее время принятия Perl Compatible Regular Expressions над POSIX регулярных выражений, таких как PHP , Ruby , , Java , Microsoft, .NET Framework , [8] и сервер Apache HTTP .
Синтаксис регулярных выражений чрезвычайно компактен благодаря истории. Первые диалекты регулярных выражений были лишь немного более выразительными, чем globs , а синтаксис был разработан таким образом, чтобы выражение напоминало текст, которому оно соответствует. [ необходима цитата ] Это означало использование не более одного символа пунктуации или пары ограничивающих символов для выражения нескольких поддерживаемых утверждений. Со временем выразительность регулярных выражений значительно возросла, но дизайн синтаксиса никогда не пересматривался и по-прежнему основывается на пунктуации. В результате регулярные выражения могут быть загадочными и чрезвычайно сложными.
Использует
Оператор m//
(совпадение) вводит совпадение по регулярному выражению. (Если он разделен косой чертой, как во всех приведенных здесь примерах, m
для краткости можно опустить начало. Если m
присутствует, как во всех следующих примерах, вместо косой черты можно использовать другие разделители.) в простейшем случае выражение типа
$ x = ~ / abc / ;
оценивается как истина тогда и только тогда, когда строка $x
соответствует регулярному выражению abc
.
Оператор s///
(подстановки), с другой стороны, определяет операцию поиска и замены:
$ x = ~ s / abc / aBc / ; # upcase the b
Еще одно использование регулярных выражений - указание разделителей для split
функции:
@words = split /, / , $ line ;
split
Функция создает список частей строки, которые разделены , что соответствует регулярному выражению. В этом примере строка делится на список отдельных частей, разделенных запятыми, и этот список затем присваивается @words
массиву.
Синтаксис
Модификаторы
Регулярные выражения Perl могут принимать модификаторы . Это однобуквенные суффиксы, изменяющие значение выражения:
$ x = ~ / abc / i ; # совпадение с шаблоном без учета регистра $ x = ~ s / abc / aBc / g ; # глобальный поиск и замена
Поскольку компактный синтаксис регулярных выражений может сделать их сложными и загадочными, /x
в Perl был добавлен модификатор, чтобы помочь программистам писать более разборчивые регулярные выражения. Это позволяет программистам помещать пробелы и комментарии внутри регулярных выражений:
$ x = ~ / a # соответствует 'a' . #, за которым следует любой символ c #, за которым следует символ 'c' / x ;
Захват
Части регулярного выражения могут быть заключены в круглые скобки; соответствующие части совпадающей строки захватываются . Захваченные строки назначаются последовательным встроенным переменным $1, $2, $3, …
, и список захваченных строк возвращается как значение совпадения.
$ x = ~ /a(.)c/ ; # захватить символ между 'a' и 'c'
Захваченные строки $1, $2, $3, …
можно использовать позже в коде.
Регулярные выражения Perl также позволяют применять встроенные или определяемые пользователем функции к зафиксированному совпадению с помощью /e
модификатора:
$ x = "Апельсины" ; $ x = ~ s / (ge) / uc ($ 1) / e ; # ОРАНЖЕВЫЕ $ x . = $ 1 ; # добавить $ x с содержимым совпадения в предыдущем операторе: OranGEsge
Объекты
Есть много способов написать объектно-ориентированный код на Perl. Самый простой - это использование «благословенных» ссылок . Это работает, идентифицируя ссылку любого типа как принадлежащую данному пакету, и пакет предоставляет методы для благословенной ссылки. Например, двухмерную точку можно определить так:
sub Point :: new { # Здесь Point-> new (4, 5) приведет к тому, что $ class будет 'Point'. # Это переменная для поддержки создания подклассов (см. Справочную страницу perloop). мой ( $ class , $ x , $ y ) = @_ ; благослови [ $ x , $ y ], $ class ; # Неявный возврат }sub Point :: distance { my ( $ self , $ from ) = @_ ; my ( $ dx , $ dy ) = ( $$ self [ 0 ] - $$ с [ 0 ], $$ self [ 1 ] - $$ с [ 1 ]); sqrt ( $ dx * $ dx + $ dy * $ dy ); }
Этот класс можно использовать, вызывая new()
для создания экземпляров и вызывая distance
эти экземпляры.
мой $ p1 = Point -> новый ( 3 , 4 ); мой $ p2 = Point -> новый ( 0 , 0 ); напечатайте $ p1 -> distance ( $ p2 ); # Отпечатков 5
Многие современные приложения Perl используют объектную систему Moose . [ необходима цитата ] Moose построен на основе Class :: MOP, метаобъектного протокола, обеспечивающего полный самоанализ для всех классов, использующих Moose. Таким образом, вы можете спрашивать классы об их атрибутах, родителях, потомках, методах и т. Д. С помощью простого API.
Классы лося:
- У класса есть ноль или более атрибутов.
- У класса есть ноль или более методов.
- Класс имеет ноль или более суперклассов (также называемых родительскими классами). Класс наследуется от своего суперкласса (ов).
- Класс выполняет ноль или более ролей, которые добавляют возможность добавлять предопределенные функции к классам без создания подклассов.
- У класса есть конструктор и деструктор.
- У класса есть метакласс.
- У класса есть ноль или более модификаторов метода. Эти модификаторы могут применяться к его собственным методам, методам, унаследованным от его предков, или методам, предоставляемым ролями.
Роли лося:
- Роль - это то, что делает класс, что-то вроде миксинов или интерфейсов в других объектно-ориентированных языках программирования. В отличие от миксинов и интерфейсов, роли можно применять к отдельным экземплярам объекта.
- Роль имеет ноль или более атрибутов.
- У роли есть ноль или более методов.
- У роли нет модификаторов метода или больше.
- У роли есть ноль или более обязательных методов.
Примеры
Пример класса, написанного с использованием расширения MooseX :: Declare [9] для Moose:
используйте MooseX :: Declare ;class Point3D extends Point { has 'z' => ( isa => 'Num' , is => 'rw' ); после очистки { $ self -> z ( 0 ); } метод set_to ( Num $ x , Num $ y , Num $ z ) { $ self -> x ( $ x ); $ self -> y ( $ y ); $ self -> z ( $ z ); } }
Это класс с именем Point3D
, расширяющим другой класс, Point
описанный в примерах Moose . Он добавляет к своему базовому классу новый атрибут z
, переопределяет метод set_to
и расширяет метод clear
.
Рекомендации
- ^ Орвант, Джон (2003). Игры, развлечения и культура Perl: лучшее из журнала Perl . ISBN 978-0-596-00312-8.
- ^ "Первая страница CPAN" . Проверено 9 декабря 2011 .
- ^ «Особенности» . Перлдок . Perl.org . Проверено 24 июля 2017 года .
- ^ "perlrun" . perldoc.perl.org - Официальная документация по языку программирования Perl . Проверено 8 января 2011 .
- ^ Уэйнрайт, Питер (2005). Pro Perl . От Pro до Expert Series. Апресс. п. 64. ISBN 978-1-59059-438-4. Проверено 3 августа 2010 .
[…] Строка без кавычек, известная как строка с голым словом […]
- ^ используя переключатель
- ^ Damian Conway, Perl Best Practices архивации 2011-09-18 в Wayback Machine , с.182
- ^ Microsoft Corp., «Регулярные выражения .NET Framework», Руководство разработчика .NET Framework , [1]
- ^ MooseX :: Объявить документацию
Внешние ссылки
- Учебники Perl
- Изучите Perl примерно за 2 часа 30 минут
- PerlMonks Сообщество, стремящееся делиться знаниями Perl и советами по программированию.