Структура языка Perl
Эта статья , возможно, содержит оригинальные исследования . ( Июль 2017 г. ) |
Структура языка Perl программирования включает в себя как синтаксические правила языка, так и общие способы организации программ. Философия дизайна Perl выражена в часто цитируемом девизе « есть более чем один способ сделать это ». Будучи многопарадигмальным динамически типизированным языком, Perl обеспечивает большую гибкость при разработке программ. Perl также поощряет модульность; это связано с компонентной структурой проектирования, лежащей в основе Unix. [ когда? ] , [1] и отвечает за размер архива CPAN , поддерживаемого сообществом репозитория, содержащего более 100 000 модулей. [2]
Основной синтаксис
[ редактировать ]На Perl минимальная программа Hello World может быть написана следующим образом:
print "Hello, World!\n"
Это печатает строку Hello , World! и новая строка , символически выраженная символом n
символ, интерпретация которого изменяется предыдущим escape-символом (обратная косая черта). Начиная с версии 5.10, появилась новая встроенная функция «say». [3] дает тот же эффект, даже проще:
say "Hello, World!"
Вся программа Perl также может быть указана как параметр командной строки Perl, поэтому ту же программу можно выполнить и из командной строки (пример показан для Unix):
$ perl -e 'print "Hello, World!\n"'
Каноническая форма программы немного более многословна:
#!/usr/bin/perl
print "Hello, World!\n";
Символ решетки представляет собой комментарий в Perl, который идет до конца строки кода и игнорируется компилятором (кроме Windows). Используемый здесь комментарий имеет особый вид: он называется линией шебанга . Это указывает Unix-подобным операционным системам найти интерпретатор Perl, что позволяет вызывать программу без явного упоминания perl
. (Обратите внимание, что в системах Microsoft Windows программы Perl обычно вызываются путем связывания .pl
расширение с помощью интерпретатора Perl. Чтобы справиться с такими обстоятельствами, perl
обнаруживает строку shebang и анализирует ее на наличие переключателей. [4] )
Вторая строка в канонической форме включает точку с запятой, которая используется для разделения операторов в Perl. Поскольку в блоке или файле имеется только один оператор, разделитель не нужен, поэтому его можно опустить в минимальной форме программы или, в более общем плане, в последнем операторе в любом блоке или файле. Каноническая форма включает его, поскольку обычно завершается каждый оператор, даже если в этом нет необходимости, поскольку это упрощает редактирование: код можно добавлять или удалять из конца блока или файла без необходимости отрегулируйте точки с запятой.
Версия 5.10 Perl представляет say
функция, которая неявно добавляет символ новой строки к своему выводу, делая минимальную программу «Hello World» еще короче:
use 5.010; # must be present to import the new 5.10 functions, notice that it is 5.010 not 5.10
say 'Hello, World!'
Типы данных
[ редактировать ]В Perl имеется ряд фундаментальных типов данных . Наиболее часто используемые и обсуждаемые скаляры , массивы , хэши , дескрипторы файлов и подпрограммы :
Тип | Сигил | Пример | Описание |
---|---|---|---|
Скаляр | $ | $foo
|
Одно значение; это может быть число, строка , дескриптор файла или ссылка . |
Множество | @ | @foo
|
Упорядоченный набор скаляров. |
Хэш | % | %foo
|
Отображение строк в скаляры; строки называются ключами , а скаляры — значениями . Также известен как ассоциативный массив . |
Дескриптор файла | никто | $foo или FOO
|
Непрозрачное представление открытого файла или другого объекта для чтения, записи или того и другого. |
Подпрограмма | & | &foo
|
Часть кода, которой можно передавать аргументы, выполнять и возвращать данные. |
Типглоб | * | *foo
|
Запись таблицы символов для всех типов с именем «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;
This is my multilined string
note that I am terminating it with the word "EOF".
EOF
Числа (числовые константы) не требуют кавычек. Perl преобразует числа в строки и наоборот в зависимости от контекста, в котором они используются. Когда строки преобразуются в числа, конечные нечисловые части строк отбрасываются. Если ни одна из ведущих частей строки не является числовой, строка будет преобразована в число 0. В следующем примере строки $n
и $m
рассматриваются как числа. Этот код печатает число «5». Значения переменных остаются прежними. Обратите внимание, что в Perl +
всегда является оператором сложения чисел. Оператором конкатенации строк является точка.
$n = '3 apples';
$m = '2 oranges';
print $n + $m;
Предусмотрены функции для округления дробных значений до целых значений: int
отсекает дробную часть, округляя в сторону нуля; POSIX::ceil
и POSIX::floor
округлять всегда вверх и всегда вниз соответственно. Преобразование числа в строку printf "%f"
или sprintf "%f"
округляйте до четности, используйте банковское округление .
Perl также имеет логический контекст, который он использует при вычислении условных операторов. Следующие значения в Perl оцениваются как ложные:
$false = 0; # the number zero
$false = 0.0; # the number zero as a float
$false = 0b0; # the number zero in binary
$false = 0x0; # the number zero in hexadecimal
$false = '0'; # the string zero
$false = ""; # the empty string
$false = (); # the empty list
$false = undef; # the return value from undef
$false = 2-3+1 # computes to 0 that is converted to "0" so it is false
Все остальные (ненулевые оценки) значения оцениваются как true. Сюда входит нечетная самоописывающая литеральная строка «0, но верно», которая на самом деле равна 0 как число, но является истиной при использовании в качестве логического значения. Все нечисловые строки также имеют это свойство, но именно эта строка усекается Perl без числового предупреждения. Менее явная, но более концептуально переносимая версия этой строки: 0E0 'или ' 0e0 ', который не предполагает, что символы оцениваются как 0, поскольку '0E0' буквально равен нулю, умноженному на десять, в нулевой степени. Пустой хэш {}
это тоже правда; в этом контексте {}
не пустой блок, потому что perl -e 'print ref {}'
возвращает HASH
.
Вычисляемые логические выражения также являются скалярными значениями. Документация не обещает, какое конкретное значение true или false будет возвращено. Многие логические операторы возвращают 1 в случае истинности и пустую строку в случае ложности. defined()
Функция определяет, имеет ли переменная какое-либо значение. В приведенных выше примерах defined($false)
верно для любого значения, кроме undef
.
Если конкретно необходимы 1 или 0, явное преобразование можно выполнить с помощью условного оператора :
my $real_result = $boolean_result ? 1 : 0;
Значения массива
[ редактировать ]( Значение массива или списка) указывается путем перечисления его элементов, разделенных запятыми и заключенных в круглые скобки (по крайней мере, там, где этого требует приоритет оператора).
@scores = (32, 45, 16, 5);
Оператор qw(), подобный кавычкам, позволяет определять список строк без ввода кавычек и запятых. Вместо круглых скобок можно использовать практически любой разделитель. Следующие строки эквивалентны:
@names = ('Billy', 'Joe', 'Jim-Bob');
@names = qw(Billy Joe Jim-Bob);
Функция разделения возвращает список строк, которые отделяются от строкового выражения с помощью строки-разделителя или регулярного выражения.
@scores = split(',', '32,45,16,5');
Доступ к отдельным элементам списка осуществляется путем указания числового индекса в квадратных скобках. скалярный символ Необходимо использовать . Подсписки (срезы массива) также можно указать, используя диапазон или список числовых индексов в скобках. В этом случае используется сигил массива. Например, $month[3]
является "April"
(первый элемент массива имеет индексное значение 0) и @month[4..6]
является ("May", "June", "July")
.
Хэш-значения
[ редактировать ]Программисты Perl могут инициализировать хэш (или ассоциативный массив ) из списка пар ключ/значение. Если ключи отделены от значений с помощью =>
оператор (иногда называемый жирной запятой ), а не запятая, они могут быть без кавычек (голые слова [5] ). Следующие строки эквивалентны:
%favorite = ('joe', "red", 'sam', "blue");
%favorite = (joe => 'red', sam => 'blue');
Доступ к отдельным значениям в хэше осуществляется путем предоставления соответствующего ключа в фигурных скобках. $
sigil идентифицирует элемент, к которому осуществляется доступ, как скаляр. Например, $favorite{joe}
равно 'red'
. Хэш также можно инициализировать, задав его значения индивидуально:
$favorite{joe} = 'red';
$favorite{sam} = 'blue';
$favorite{oscar} = 'green';
Доступ к нескольким элементам можно получить с помощью @
вместо этого сигил (определяющий результат в виде списка). Например,
@favorite{'joe', 'sam'}
равно ('red', 'blue')
.
Дескрипторы файлов
[ редактировать ]Дескрипторы файлов обеспечивают доступ к ресурсам для чтения и записи. Чаще всего это файлы на диске, но также могут быть устройством, каналом или даже скалярным значением.
Первоначально дескрипторы файлов можно было создавать только с помощью переменных пакета, используя соглашение ALL_CAPS, чтобы отличать их от других переменных. Perl 5.6 и более поздние версии также принимают скалярную переменную, которой будет присвоена ( autovivified ) ссылка на анонимный дескриптор файла вместо именованного дескриптора файла.
Значения типаглоба
[ редактировать ]Значение typeglob — это запись таблицы символов. Основное использование typeglobs — создание псевдонимов таблицы символов. Например:
*PI = \3.141592653; # creating constant scalar $PI
*this = *that; # creating aliases for all data types 'this' to all data types 'that'
Функции массива
[ редактировать ]Количество элементов в массиве можно определить либо путем оценки массива в скалярном контексте, либо с помощью метода $#
сигил. Последний дает индекс последнего элемента массива, а не количество элементов. Выражения скалярные( @array
) и ( $#array + 1
) эквивалентны.
Хэш-функции
[ редактировать ]Есть несколько функций, которые работают с целыми хэшами. Функция ключей принимает хэш и возвращает список его ключей. Аналогично, функция значений возвращает значения хеша. Обратите внимание, что ключи и значения возвращаются в последовательном, но произвольном порядке.
# Every call to each returns the next key/value pair.
# All values will be eventually returned, but their order
# cannot be predicted.
while (($name, $address) = each %addressbook) {
print "$name lives at $address\n";
}
# Similar to the above, but sorted alphabetically
foreach my $next_name (sort keys %addressbook) {
print "$next_name lives at $addressbook{$next_name}\n";
}
Структуры управления
[ редактировать ]В Perl имеется несколько видов управляющих структур.
Он имеет блочно-ориентированные структуры управления, аналогичные структурам в языках программирования C, JavaScript и Java . Условия заключаются в круглые скобки, а управляемые блоки — в фигурные скобки:
label while ( cond ) { … } label while ( cond ) { … } continue { … } label for ( init-expr ; cond-expr ; incr-expr ) { … } label foreach var ( list ) { … } label foreach var ( list ) { … } continue { … } if ( cond ) { … } if ( cond ) { … } else { … } if ( cond ) { … } elsif ( cond ) { … } else { … }
Если контролируется только один оператор, модификаторы операторов обеспечивают более краткий синтаксис:
statement if cond ; statement unless cond ; statement while cond ; statement until cond ; statement foreach list ;
Логические операторы короткого замыкания обычно используются для воздействия на поток управления на уровне выражения:
expr and expr expr && expr expr or 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
возвращает все элементы списка , для которых управляемый блок или выражение имеет значение true. map
оценивает управляемый блок или выражение для каждого элемента списка и возвращает список результирующих значений. Эти конструкции обеспечивают простой стиль функционального программирования .
Вплоть до версии 5.10.0 в Perl 5 не было оператора переключения . Начиная с версии 5.10.0, оператор многопутевого ветвления назывался given
/ when
доступен, который принимает следующий вид:
use v5.10; # must be present to import the new 5.10 functions given ( expr ) { when ( cond ) { … } default { … } }
Синтаксически эта структура аналогична операторам переключения, встречающимся в других языках, но с несколькими важными отличиями. Самым большим из них является то, что в отличие от структур switch/case операторы заданные/когда прерывают выполнение после первого успешного перехода, вместо того, чтобы ждать явно определенных команд прерывания. И наоборот, явный continue
вместо этого необходимы для эмуляции поведения переключателя.
Для тех, кто не использует Perl 5.10, документация Perl описывает полдюжины способов достижения того же эффекта с помощью других управляющих структур. Существует также модуль Switch, который обеспечивает функциональность по образцу родственного языка Raku . Он реализован с помощью исходного фильтра , поэтому его использование неофициально не рекомендуется. [6]
Perl включает в себя goto label
утверждение, но оно используется редко. Ситуации, когда goto
требуется в других языках, не встречается так часто в Perl из-за широты возможностей управления потоком.
Существует также goto &sub
оператор, выполняющий хвостовой вызов . Он завершает текущую подпрограмму и немедленно вызывает указанную sub
. Это используется в ситуациях, когда вызывающая сторона может выполнять более эффективное управление стеком , чем сам Perl (обычно потому, что не требуется никаких изменений в текущем стеке), а в глубокой рекурсии хвостовой вызов может оказать существенное положительное влияние на производительность, поскольку позволяет избежать накладные расходы на управление областью/стеком при возврате.
Подпрограммы
[ редактировать ]Подпрограммы определяются с помощью sub
ключевое слово и вызываются просто путем их присвоения имени. Если рассматриваемая подпрограмма еще не объявлена, для ее вызова требуются либо круглые скобки после имени функции, либо амперсанд ( & ) перед ним. Но использование & без круглых скобок также неявно передаст аргументы текущей подпрограммы вызываемой, а использование & с круглыми скобками обойдет прототипы.
# Calling a subroutine
# Parentheses are required here if the subroutine is defined later in the code
foo();
&foo; # (this also works, but has other consequences regarding arguments passed to the subroutine)
# Defining a subroutine
sub foo { … }
foo; # Here parentheses are not required
Список аргументов может быть указан после имени подпрограммы. Аргументами могут быть скаляры, списки или хеши.
foo $x, @y, %z;
Параметры подпрограммы не обязательно должны быть объявлены в виде числа или типа; на самом деле они могут меняться от звонка к звонку. Любая проверка параметров должна выполняться явно внутри подпрограммы.
Массивы расширяются до своих элементов; хеши расширяются до списка пар ключ/значение; и вся партия передается в подпрограмму как один плоский список скаляров.
Какие бы аргументы ни были переданы, они доступны подпрограмме в специальном массиве. @_
. Элементы @_
являются ссылками на фактические аргументы; изменение элемента @_
изменяет соответствующий аргумент.
Элементы @_
Доступ к нему можно получить, подписавшись на него обычным способом.
$_[0], $_[1]
Однако результирующий код может быть трудным для чтения, а параметры имеют семантику передачи по ссылке , что может быть нежелательно.
Одна распространенная идиома – назначить @_
в список именованных переменных.
my ($x, $y, $z) = @_;
Это обеспечивает мнемонические имена параметров и реализует семантику передачи по значению . my
Ключевое слово указывает, что следующие переменные лексически ограничены содержащим блоком.
Другая идиома — сдвинуть параметры с @_
. Это особенно часто случается, когда подпрограмма принимает только один аргумент или для обработки $self
аргумент в объектно-ориентированных модулях.
my $x = shift;
Подпрограммы могут назначать @_
к хешу для имитации именованных аргументов; это рекомендуется в Perl Best Practices для подпрограмм, которые, вероятно, когда-либо будут иметь более трех параметров. [7]
sub function1 {
my %args = @_;
print "'x' argument was '$args{x}'\n";
}
function1( x => 23 );
Подпрограммы могут возвращать значения.
return 42, $x, @y, %z;
Если подпрограмма не завершается через return
оператор, он возвращает последнее выражение, вычисленное в теле подпрограммы. Массивы и хэши в возвращаемом значении расширяются до списков скаляров, как и для аргументов.
Возвращенное выражение оценивается в контексте вызова подпрограммы; это может удивить неосторожного.
sub list { (4, 5, 6) }
sub array { @x = (4, 5, 6); @x }
$x = list; # returns 6 - last element of list
$x = array; # returns 3 - number of elements in list
@x = list; # returns (4, 5, 6)
@x = array; # returns (4, 5, 6)
Подпрограмма может обнаружить контекст своего вызова с помощью wantarray
функция.
sub either {
return wantarray ? (1, 2) : 'Oranges';
}
$x = either; # returns "Oranges"
@x = either; # returns (1, 2)
Анонимные функции
[ редактировать ]Perl 5 поддерживает анонимные функции, [8] следующее:
(sub { print "I got called\n" })->(); # 1. fully anonymous, called as created
my $squarer = sub { my $x = shift; $x * $x }; # 2. assigned to a variable
sub curry {
my ($sub, @args) = @_;
return sub { $sub->(@args, @_) }; # 3. as a return value of another function
}
# example of currying in Perl programming
sub sum { my $tot = 0; $tot += $_ for @_; $tot } # returns the sum of its arguments
my $curried = curry \&sum, 5, 7, 9;
print $curried->(1,2,3), "\n"; # prints 27 ( = 5 + 7 + 9 + 1 + 2 + 3 )
Другие конструкции принимают в качестве аргументов голые блоки , которые выполняют функцию, аналогичную лямбда-функциям с одним параметром, но не имеют того же соглашения о передаче параметров, что и функции — @_ не установлен.
my @squares = map { $_ * $_ } 1..10; # map and grep don't use the 'sub' keyword
my @square2 = map $_ * $_, 1..10; # braces unneeded for one expression
my @bad_example = map { print for @_ } 1..10; # values not passed like normal Perl function
Регулярные выражения
[ редактировать ]Язык Perl включает специализированный синтаксис для написания регулярных выражений (RE или регулярных выражений), а интерпретатор содержит механизм сопоставления строк с регулярными выражениями. Механизм регулярных выражений использует алгоритм обратного поиска , расширяя его возможности от простого сопоставления с образцом до захвата и замены строк. Механизм регулярных выражений основан на регулярном выражении, написанном Генри Спенсером .
Синтаксис регулярных выражений Perl изначально был взят из регулярных выражений Unix версии 8. Однако перед первым выпуском Perl он изменился и с тех пор стал включать гораздо больше возможностей. Многие другие языки и приложения теперь используют регулярные выражения, совместимые с Perl, вместо регулярных выражений POSIX , такие как PHP , Ruby , Java , Microsoft .NET Framework , [9] и HTTP-сервер Apache .
Синтаксис регулярных выражений чрезвычайно компактен благодаря истории. Первые диалекты регулярных выражений были лишь немногим более выразительными, чем globs , а синтаксис был разработан таким образом, чтобы выражение напоминало текст, которому оно соответствует. [ нужна ссылка ] Это означало использование не более одного символа пунктуации или пары символов-разделителей для выражения немногих поддерживаемых утверждений. Со временем выразительность регулярных выражений значительно выросла, но структура синтаксиса никогда не пересматривалась и по-прежнему опирается на пунктуацию. В результате регулярные выражения могут быть загадочными и чрезвычайно плотными.
Использование
[ редактировать ]The m//
Оператор (match) вводит совпадение по регулярному выражению. (Если он разделен косой чертой, как во всех примерах здесь, ведущий m
можно опустить для краткости. Если m
присутствует, как и во всех следующих примерах, вместо косой черты можно использовать другие разделители.) В простейшем случае такое выражение, как
$x =~ /abc/;
оценивается как true тогда и только тогда, когда строка $x
соответствует регулярному выражению abc
.
The s///
Оператор (замены), с другой стороны, определяет операцию поиска и замены:
$x =~ s/abc/aBc/; # upcase the b
Другое использование регулярных выражений — указание разделителей для split
функция:
@words = split /,/, $line;
The split
Функция создает список частей строки, разделенных тем, что соответствует регулярному выражению. В этом примере строка делится на список своих частей, разделенных запятыми, и этот список затем присваивается @words
множество.
Синтаксис
[ редактировать ]Модификаторы
[ редактировать ]Регулярные выражения Perl могут принимать модификаторы . Это однобуквенные суффиксы, которые изменяют смысл выражения:
$x =~ /abc/i; # case-insensitive pattern match
$x =~ s/abc/aBc/g; # global search and replace
Поскольку компактный синтаксис регулярных выражений может сделать их запутанными и загадочными, /x
Модификатор был добавлен в Perl, чтобы помочь программистам писать более разборчивые регулярные выражения. Он позволяет программистам размещать пробелы и комментарии внутри регулярных выражений:
$x =~ /
a # match 'a'
. # followed by any character
c # then followed by the 'c' character
/x;
Захват
[ редактировать ]Части регулярного выражения могут быть заключены в круглые скобки; соответствующие части соответствующей строки захватываются . Захваченные строки присваиваются последовательным встроенным переменным. $1, $2, $3, …
, и в качестве значения совпадения возвращается список захваченных строк.
$x =~ /a(.)c/; # capture the character between 'a' and 'c'
Захваченные строки $1, $2, $3, …
может быть использован позже в коде.
Регулярные выражения Perl также позволяют применять встроенные или пользовательские функции к обнаруженному совпадению, используя метод /e
модификатор:
$x = "Oranges";
$x =~ s/(ge)/uc($1)/e; # OranGEs
$x .= $1; # append $x with the contents of the match in the previous statement: OranGEsge
Объекты
[ редактировать ]Этот раздел нуждается в расширении . Вы можете помочь, добавив к нему . ( март 2010 г. ) |
Существует множество способов написания объектно-ориентированного кода на Perl. Самым простым является использование «благословенных» ссылок . Это работает путем идентификации ссылки любого типа как принадлежащей данному пакету, и пакет предоставляет методы для благословенной ссылки. Например, двумерную точку можно определить следующим образом:
sub Point::new {
# Here, Point->new(4, 5) will result in $class being 'Point'.
# It's a variable to support subclassing (see the perloop manpage).
my ($class, $x, $y) = @_;
bless [$x, $y], $class; # Implicit return
}
sub Point::distance {
my ($self, $from) = @_;
my ($dx, $dy) = ($$self[0] - $$from[0], $$self[1] - $$from[1]);
sqrt($dx * $dx + $dy * $dy);
}
Этот класс можно использовать, вызвав new()
для создания экземпляров и вызова distance
по этим случаям.
my $p1 = Point->new(3, 4);
my $p2 = Point->new(0, 0);
print $p1->distance($p2); # Prints 5
Многие современные приложения Perl используют объектную систему Moose . [ нужна ссылка ] Moose построен на основе Class::MOP, метаобъектного протокола, обеспечивающего полный самоанализ всех классов, использующих Moose. Таким образом, вы можете спрашивать классы об их атрибутах, родителях, дочерних элементах, методах и т. д., используя простой API.
Классы лосей:
- Класс имеет ноль или более атрибутов.
- Класс имеет ноль или более методов.
- Класс имеет ноль или более суперклассов (родительских классов). Класс наследует свой суперкласс(ы).
- Класс выполняет ноль или более ролей, что добавляет возможность добавлять к классам заранее определенные функции без создания подклассов.
- Класс имеет конструктор и деструктор.
- У класса есть метакласс.
- Класс имеет ноль или более модификаторов методов. Эти модификаторы могут применяться к собственным методам, методам, унаследованным от его предков, или методам, предоставляемым ролями.
Роли лося:
- Роль — это то, что делает класс, что-то вроде примесей или интерфейсов в других объектно-ориентированных языках программирования. В отличие от примесей и интерфейсов, роли можно применять к отдельным экземплярам объектов.
- Роль имеет ноль или более атрибутов.
- Роль имеет ноль или более методов.
- Роль имеет ноль или более модификаторов методов.
- Роль имеет ноль или более обязательных методов.
Примеры
[ редактировать ]Пример класса, написанного с использованием MooseX::Declare [10] расширение для Moose:
use MooseX::Declare;
class Point3D extends Point {
has 'z' => (isa => 'Num', is => 'rw');
after clear {
$self->z(0);
}
method 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 г.
- ^ "Функции" . Перлдок . Перл.орг . Проверено 24 июля 2017 г.
- ^ "перлрун" . perldoc.perl.org — Официальная документация по языку программирования Perl . Проверено 8 января 2011 г.
- ^
Уэйнрайт, Питер (2005). Про Перл . Серия от профессионала до эксперта. Апресс. п. 64. ИСБН 978-1-59059-438-4 . Проверено 3 августа 2010 г.
[…] строка без кавычек, известная как пустая строка […]
- ^ с помощью переключателя
- ^ Дамиан Конвей, Лучшие практики Perl, заархивировано 18 сентября 2011 г. в Wayback Machine , стр. 182.
- ^ «perlsub — Подпрограммы Perl — Браузер Perldoc» . perldoc.perl.org . Проверено 24 ноября 2020 г.
- ^ Microsoft Corp., «Регулярные выражения .NET Framework», Руководство разработчика .NET Framework , [1]
- ^ MooseX::Объявить документацию
Внешние ссылки
[ редактировать ]- Учебники по Perl
- Изучите Perl примерно за 2 часа 30 минут.
- PerlMonks Сообщество, стремящееся делиться знаниями Perl и советами по программированию.