perlintro

Perl core documentation, “perlintro”, public translation into Russian from English More about this translation.

Translate into another language.

=head1 НАЗВАНИЕ

perlintro -- краткое введение и обзор Perl

=head1 ОПИСАНИЕ

Цель этого документа — дать вам общее представление о языке программирования Perl, вместе с ссылками на другую документацию. Он является начальным руководством для новичков и содержит достаточно информации для чтения и понимания в общих чертах скриптов написанных другими людьми, а также для написания собственных.

Этот вводный документ не претендует на полноту. Он даже не претендует на абсолютную точность. В некоторых случаях "совершенство" пало жертвой попытки подать главную идею. I<Настоятельно> рекомендуется соотносить информацию, полученную из этого руководства, с другими руководствами по Perl; необходимый список литературы может быть найден в L<perltoc>.

Изучая этот документ, вы увидите ссылки на другие части документации Perl. Вы можете читать эту документацию используя команду C<perldoc> или метод, который вы используете для чтения этого документа.

=head2 Что такое Perl?

Perl — это многоцелевой язык программирования, изначально разработанный для обработки текста и сейчас используется для широкого спектра целей, включающих системное администрирование, веб-разработку, сетевое программирование, разработку GUI и многое другое.

Этот язык скорее практичный (легкий в использовании, производительный и полный), чем красивый (элегантный, краткий). Его основные достоинства — это легкость в использовании, поддержка как процедурного, так и объектно-ориентированного программирования, мощная встроенная поддержка для обработки текстовых данных, он имеет одну из самых впечатляющих коллекций сторонних модулей.

Другие определения Perl даны в L<perl>, L<perlfaq> и, без сомнения, других местах. Это лишний раз доказывает, что разные люди по-разному воспринимают Perl.

=head2 Запуск Perl-программ

Чтобы запустить программу на Perl из командной строки Unix выполните:

perl progname.pl

Вместо этого можно поместить первой строкой скрипта следующее:

#!/usr/bin/env perl

и запустить скрипт как C</path/to/script.pl>. Конечно, вы должны вначале сделать скрипт исполняемым, выполнив C<chmod 755 скрипт.pl> (в среде Unix).

(Такая начальная строка подразумевает, что вы имеете в своей операционной системе программу B<env>. Вы также можете просто указать полный путь к исполняемому файлу perl, что-то вроде C<#!/usr/bin/perl>).

Для подробной информации, включая инструкции по другим платформам, таким как Windows и Mac OS, читайте L<perlrun>.

=head2 Общая безопасность

Perl по умолчанию очень нетребовательный. Для того, чтобы сделать его более надёжным, рекомендуется начинать все программы со следующих строк:

#!/usr/bin/perl
use strict;
use warnings;

Две дополнительные строки заставляют perl отлавливать различные известные проблемы в вашем коде. Они проверяют разные вещи, так что вам нужны обе. При обнаружении потенциальной проблемы с помощью C<use strict;>, ваш код сразу же прекратит работу. В то время как C<use warnings;> просто выдаст вам предупреждение (подобно ключу B<-w> в командной строке) и позволит выполниться вашему коду. Чтобы прочесть о них больше, обратитесь к их man страницам: L<strict> и L<warnings>.

=head2 Общее введение в синтаксис

Perl скрипт или программа содержит одну или более команд. Эти команды просто линейно записаны в скрипт. Нет необходимости в функции C<main()> или подобных вещах.

Команды Perl заканчиваются точкой с запятой:

print "Hello, world";

Комментарии начинаются с решетки и длятся до конца строки.

# Это комментарий.

Пробелы игнорируются:

print
"Hello, world"
;

... кроме обозначенных внутри кавычек:

# напечатает перевод строки в середине

print "Hello
world";

Двойные или одинарные кавычки могут использоваться для обозначения литеральных строк:

print "Hello, world";
print 'Hello, world';

Однако, только двойные кавычки интерполируют переменные и спецсимволы, такие как знак новой строки (C<\n>):

print "Hello, $name\n"; #работает как надо
print 'Hello, $name\n'; #печатает $name\n буквально

Вокруг чисел кавычки не нужны:

print 42;

Вы можете использовать скобки для аргументов функций или исключить их, в соответствии с вашими личными предпочтениями. Они необходимы только иногда, для уточнения приоритета выполнения.

print("Hello, world\n");
print "Hello, world\n";

Более подробная информация по синтаксису Perl может быть найдена в L<perlsyn>.

=head2 Типы переменных Perl

В Perl есть три главных типа переменных: скаляры, массивы и хэши.

=over 4

=item Скалярные

Скаляр представляет единичное значение:

my $animal = "camel";
my $answer = 42;

Значения скаляров могут быть строками, числами или числами с плавающей точкой, и Perl автоматически преобразует их между собой, если понадобится. Нет необходимости предварительно указывать типы ваших переменных, но объявлять их надо с ключевым словом C<my> (это одно из требований C<use strict;>).

Значения скаляров могут использоваться различным образом:

print $animal;
print "The animal is $animal\n";
print "The square of $answer is ", $answer * $answer, "\n";

Есть несколько "магических" переменных, имена которых выглядят как пунктуация или просто набор символов. Эти специальные переменные используются для различных целей, и они документированы в L<perlvar>. Единственная такая переменная, о которой вам сейчас надо знать — C<$_> — является "переменной по умолчанию". Она используется по умолчанию в качестве аргумента в ряде функций в Perl и косвенно устанавливается в циклах.

print; # напечатать данные из $_ по умолчанию

=item Массивы

Массив представляет список значений:

my @animals = ("camel", "llama", "owl");
my @numbers = (23, 42, 69);
my @mixed = ("camel", 42, 1.23);

Нумерация элементов массива начинается с нуля. Вот как можно получить элемент массива:

print $animals[0]; #печатает "camel"
print $animals[1]; #печатает "llama"

Специальная переменная C<$#array> содержит индекс последнего элемента в массиве:

print $mixed[$#mixed]; # последний элемент, печатает 1.23

У вас может возникнуть искушение воспользоваться конструкцией C<$#array + 1> для вычисления количества элементов в массиве. Не надо. Использование C<@array> там, где Perl ожидает скалярное значение ("в скалярном контексте"), даст вам количество элементов в массиве:

if (@animals < 5) { ... }

Элементы, получаемые из массива, начинаются с C<$> потому, что мы получаем только одно значение — вы запрашиваете скаляр, вы получаете скаляр.

Получение нескольких значений из массива:

@animals[0,1]; # дает ("camel", "llama");
@animals[0..2]; # дает ("camel", "llama", "owl");
@animals[1..$#animals]; #дает все значения, кроме первого

Это называется "срез массива".

Вы можете производить над списком различные полезные действия:

my @sorted = sort @animals;
my @backwards = reverse @numbers;

Есть также несколько специальных массивов, такие как C<@ARGV> (аргументы командной строки, переданные вашему скрипту) и C<@_> (аргументы, переданные подпрограмме). Они документированы в L<perlvar>.

=item Хэши

Хэш представляет собой набор пар ключ-значение:

my %fruit_color = ("apple", "red", "banana", "yellow");

Вы можете использовать пробел и оператор C<< => >> для более элегантного представления:

my %fruit_color = (
apple => "red",
banana => "yellow",
);

Получить элемент хэша:

$fruit_color{"apple"}; #дает "red"

Вы можете получить список ключей и значений с помощью C<keys()> и C<values()> соответственно.

my @fruits = keys %fruit_colors;
my @colors = values %fruit_colors;

Хэши не имеют конкретного внутреннего порядка, но вы всё же можете сортировать ключи и использовать циклы.

Подобно специальным скалярам и массивам, существуют и специальные хэши. Наиболее часто употребляемый из них — это C<%ENV>, содержит переменные окружения. Читайте об этом (и других специальных переменных) в L<perlvar>.

=back

Скаляры, массивы и хэши более подробно документированы в L<perldata>.

Более сложные типы данных могут быть построены с использованием ссылок, которые позволяют
вам строить списки и хэши внутри других списков и хэшей.

Ссылка является скалярным значением и может ссылаться на любой другой тип данных Perl. Таким образом, используя ссылку в качестве элемента массива или хэша, вы можете легко создать списки и хэши внутри других списков и хэшей. Следующий пример показывает двухуровневую структуру - хэш хэшей, построенный с использованием ссылок на анонимный хэш.

my $variables = {
scalar => {
description => "single item",
sigil => '$',
},
array => {
description => "ordered list of items",
sigil => '@',
},
hash => {
description => "key/value pairs",
sigil => '%',
},
};

print "Scalars begin with a $variables->{'scalar'}->{'sigil'}\n";

Исчерпывающая информация по теме ссылок может быть найдена в L<perlreftut>, L<perllol>, L<perlref> и L<perldsc>.

=head2 Области видимости переменных

В предыдущих абзацах во всех примерах использовался синтаксис:

my $var = "value";

Вообще-то, ключевое слово C<my> не является обязательным. Можно просто писать:

$var = "value";

Однако, указанный выше синтаксис создаёт в вашей программе глобальную переменную, что является плохой практикой. C<my> создаст переменную с ограниченной областью видимости. Переменные попадают в область видимости блока (т.е. заключенный в фигурные скобки список объявлений), в котором они объявлены.

my $x = "foo";
my $some_condition = 1;
if ($some_condition) {
my $y = "bar";
print $x; # напечатает "foo"
print $y; # напечатает "bar"
}
print $x; # напечатает "foo"
print $y; # ничего не напечатает; $y вышло из видимости

Использование C<my> в сочетании с C<use strict;> в начале ваших Perl скриптов означает, что интерпретатор будет отслеживать общие ошибки программирования. В приведенном выше примере, последний вызов C<print $y> может привести к ошибке компиляции и предотвратить дальнейшее исполнение программы. Использование C<strict> настоятельно рекомендуется.

=head2 Условные и цикличные конструкции

В Perl имеется большинство обычных условных и циклических конструкций, исключая case/switch (но если очень хочется, то для Perl 5.8 и новее, на CPAN есть модуль Switch. Смотрите секцию модулей ниже, для подробной информации о модулях и CPAN).

Условиями могут быть любые выражения Perl. Смотрите перечень операторов в следующей секции для информации по сравнению и логическим булевым операторам, которые обычно используются в выражениях сравнения.

=over 4

=item if

if ( условие ) {
...
} elsif ( другое условие ) {
...
} else {
...
}

Pages: ← previous Ctrl next
1 2 3

Original (English): perlintro

Translation: © saturn721, Minoru, Алексей Суриков, Vladimir Brednikov, Dim_K, XoR, sharifulin, AndreyBelov, mikhail.lyubimov .

translated.by crowd

Like this translation? Share it or bookmark!