Пятница, 19.04.2024, 19:36
Приветствую Вас Гость | RSS
Главная | Лекции | Регистрация | Вход
Меню сайта
Форма входа
Логин:
Пароль:
Категории раздела
Лекция [24]
Мини-чат
100
Поиск
Наш опрос
Оцените мой сайт
Всего ответов: 2
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
    Программирование Perl
    Главная » Статьи » Лекция » Лекция

    Лекция 2.1: Литералы и скалярные данные

    Литералы

    Perl - очень практичный язык, и изучить его основы довольно просто. Поскольку большинство синтаксических конструкций Perlоснованы на языке С, то для программистов, знающих языки C, C++, C#, JavaJavaScriptPython или PHPсинтаксис Perl будет очень знакомым. Но и тот, кто раньше писал на языке PascalFortran или Basic, легко привыкнет к нотации Perl. Нетрудно будет и тем, кто не знает ни одного языка программирования, поскольку Perl спроектирован так, чтобы новичок смог научиться писать на небольшом подмножестве языка, а затем постепенно углублялся в его тонкости. Знакомство с языком Perl мы начнем с правил записи литералов - непосредственного представления в программе значений данных таких как числа и строки. Иногда литералы неправильно называют константами, под которыми в программировании чаще имеют в виду имена, представляющие неизменяемые данные.

    Числа

    Редкая компьютерная программа обходится без использования числовых литералов. В программе на Perl числа записываются самым естественным образом. Так, например, выглядят десятичные целые числа, со знаками и без:

    12 -34 +56

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

    .12 34. -456.78 +9.0

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

    123_456 -7_890_098 1_000_000_000_000

    Очень маленькие или очень большие числовые значения, целые или дробные, удобно записывать в экспоненциальной форме (также называемой "научной" нотацией):

    123E-4 -56e+7 8e9

    Латинская буква "E" (заглавная или строчная) в подобных литералах читается как "умноженное на 10 в степени", то есть соответствует арифметическому выражению 123*10-4. Знак "+" у основания и степени числа необязателен.

    Иногда требуется записывать числа не в десятичной, а в других системах счисления. Для записи шестнадцатеричных чисел применяется префикс 0x. В этой системе счисления каждая цифра представляет 4 бита данных, а буквами от A до F (независимо от их регистра) обозначаются дополнительные "цифры" от 10 до 15. Так записываются в шестнадцатеричном виде числа 13, -10, 53392, и 1024:

    0x0d -0x0A 0xD090 0x400

    В некоторых случаях (например, при записи атрибутов файла в Unix) нагляднее изобразить числа в восьмеричной системе счисления. Обратите внимание, что восьмеричные числа записываются с ведущим нулем, а каждая цифра из диапазона от 0 до 7 представляет 3 бита данных, так что все числовые литералы из одних цифр с ведущим нулем рассматриваются как восьмеричные числа. Вот как будут выглядеть в восьмеричном виде числа 292, -438, 511, и 1024:

    0444 -0666 0777 02000

    Когда нужно представить двоичные числа, то перед ними ставится признак двоичной системы счисления 0b (каждая цифра 0 или 1 представляет 1 бит). Вот числа 17, -85, 238 и 1024, записанные как двоичные литералы:

    0b00010001 -0b01010101 0b1110_1110 0b10000000000

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

    Строки

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

    "Это строка." "А" 'это другая строка' '.'

    Иногда в строковых литералах требуется представить специальный символ (управляющий символ или символ, отсутствующий на клавиатуре). Для этого используется так называемая escape-последовательность (называемая также управляющей последовательностью) - это символ "\" (backslash, обратная косая черта), за которым следует один или несколько символов. Все знаки управляющей последовательности представляют один символ в строковом литерале. Например:

    \a звонок (Alert, bell) или 0x07 в 16-теричном представлении
    \b возврат на шаг (Backspace) или 0x08
    \e символ "эскейп" (Escape) или 0x1B
    \f прогон страницы (Form feed) или 0x0C
    \n новая строка (Newline) или 0x0A
    \r возврат каретки (Return) или 0x0D 
    \t табуляция (Tabulation) или 0x09
    \033 восьмеричный код символа (например, 033)
    \x1b шестнадцатеричный код символа (например, 1B)
    \Cc управляющая последовательность (например, Control+C) 
    \x{263A} двухбайтный символ набора Unicode (например, ?)
    \N{sigma} именованный символ набора Unicode (например, ?)
    \" символ двойной кавычки (quote)
    \' символ одинарного апострофа (apostrophe)
    \\ символ обратной черты (backslash)
    \$ любой другой символ, как он есть (например, знак доллара)

    В литеральных строках, заключенных в двойные кавычки, выполняется замена каждой escape-последовательности на соответствующее значение специального символа. Такая подстановка называется интерполяцией, например:

    "символ перевода на новую строку:\n"
    "слова\t,разделенные\t табуляцией"
    "вставка \"кавычек\" в литерал, заключенный в кавычки"

    Если интерполяция управляющих последовательностей не требуется, то строковый литерал нужно заключить в одинарныеапострофы:

    'обратная косая с буквой n:\n'
    'здесь \t - это обратная косая и буква t'
    'вставка \'апострофов\' в литерал, заключенный в апострофы'

    В этом случае из escape-последовательностей только \' и \\ заменяются на символы апострофа и обратной черты. А остальные последовательности, такие как '\n' или '\x00', представляют обычные символы. Если необходимо вставить в строковый литералапострофы, то строку заключают в двойные кавычки, и наоборот:

    'книга "Изучаем Perl"' "книга 'Изучаем Perl'"

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

    'А это пример строкового литерала,
    расположенного в программе
    на нескольких строках'

    Поскольку здесь сохраняются невидимые символы перехода на новую строку, многострочные литералы удобно использовать для записи текста, предназначенного для вывода на печать на нескольких строках. Строковые литералы могут не содержать ни одного символа. Это так называемые "пустые строки", которые записываются как два апострофа или две кавычки без пробела между ними ('' или "").

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

    Переменные

    Как известно, переменные - это программные объекты для хранения во время выполнения программы данных об объектах реального мира. В Perl имеются две основные разновидности данных: строки и числа, называемые скалярными данными, то есть данными, представляющими единичное значение. К скалярам также относятся ссылки, которые будут рассмотрены в лекции 11.

    Для хранения скалярных данных предназначены скалярные переменные, каждая из которых может содержать одно значение. Перед именем такой переменной ставится символ $, обозначающий скалярную величину ($ - это стилизованное "s", то есть scalar). Далее, в лекции 5, будет рассмотрен другой тип переменных - массивы, которые содержат множественные значения, логически связанные вместе. В массивах может одновременно храниться несколько скалярных значений, и имена массивов предваряются символом @ (@ - это стилизованное "a", то есть array). Поначалу эти "забавные символы" (funny characters, шутливо называемые "оккультными знаками" - sigils) перед именами переменных кажутся непривычными и даже лишними. Но позже вам раскроется глубокий смысл и удобство этих символов, официально называемых разыменовывающими префиксами. На первый взгляд очевидно, что они своим видом напоминают, какое значение содержит переменная - единичное или множественное. Скаляры представляют в Perl лингвистическое понятие единственного числа, а массивы - множественного числа. Вообще, переменные воплощают грамматическую идею существительных, в отличие от процедур или функций, исполняющих в программе роль глаголов.

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

    • в имени допускается использовать латинские буквы, символы подчеркивания, которые приравниваются к буквам, и цифры;
    • имя переменной должно начинаться с буквы (длина имени переменной практически не ограничивается).

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

    $website
    $catch22
    $user_name
    $input_record_counter
    $this_is_an_example_of_a_very_long_variable_name

    В большинстве процедурных языков каждую переменную в программе требуется объявлять, определяя, какой тип данныхдопустимо хранить в ней: например, booleancharacterstringbyteshortintegerlongrealfloat илиdouble. В Perl можно вводить переменные в любом месте программы без объявления. Чтобы использовать переменную, надо просто упомянуть ее имя в программе, обычно это происходит при присваивании ей начального значения.

    $background_color = 0xFFF;
    $version_number = 5.8;
    $www_site = "www.perl.com";
    $email_address = 'larry@wall.org';

    Если значение переменной не присвоено, в ней хранится специальное неопределенное значение undefНеопределенность значения переменной можно проверить с помощью встроенной функции defined(), возвращающей истинное значение, еслизначение переменной определено. Одна и та же переменная может поочередно иметь неопределенное значение или хранитьзначение любого из основных типов, например, строку или число (целое или дробное):

    $variable;
    $variable = 'Строка';
    $variable = 25;
    $variable = 3.141592653;

    В именах переменных заглавные и строчные буквы различаются, поэтому приведенные ниже имена относятся к совершенно разным переменным:

    $language $Language $LanguagE $LaNgUaGe

    Необъявленные переменные имеют глобальную область видимости в пределах пакета. Область видимости переменных определяется рамками программных единиц: блоков, подпрограмм, пакетов, о которых подробно будет рассказано в лекциях 12 и13. Чтобы задать область видимости переменных, нужно их объявить явно. Для объявления переменных применяются такие ключевые слова:

    • my - переменные с лексической областью видимости;
    • our - глобальные переменные с лексической областью видимости;
    • local - временное скрытие глобальных переменных.

    В одном объявлении можно перечислить несколько переменных. Объявляемым переменным рекомендуется сразу присваивать начальные значения, например:

    local $_ = 25
    my ($buffer = '', $count = 0, $end_of_file = 0)
    our $version = 2.5, $author = 'Mike Shock'

    Различия между этими типами переменных будут подробно рассмотрены в лекциях, посвященных подпрограммам и модулям. А пока, памятуя об общих правилах хорошего стиля программирования и требованиях к надежности программ, постараемся свести кминимуму использование глобальных переменных. Для этого достаточно взять за правило преимущественно использовать лексические переменные, объявляемые с помощью ключевого слова my. Применение переменных с лексической видимостью также сокращает расход памяти, поскольку они автоматически уничтожаются при выходе из области видимости.

    Категория: Лекция | Добавил: mazay (06.02.2014)
    Просмотров: 308 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Создать бесплатный сайт с uCozCopyright MyCorp © 2024