Пару слов о типах.
Как и в любом языке (кроме, пожалуй, кодов процессора), в перл данные не просто свалены в кучу, а для удобного использования разбиты на типы. Люди, уже программировавшие на языках C\C++ или Pascal\Delphi сразу вспомнят про int(integer), char, string и будут не правы.
Для всего выше перечисленного в перл есть эквивалент — скаляр, он же — 1ый тип данных. По сути, скаляр — это «элемент», и не важно какого множества: чисел, символов, строк, ссылок… Главное, что он один! Для того, чтобы создать скаляр нам не нужно его как-то особенно объявлять, просто используем: $a=12; Значок $ даёт понять перлу, что это скаляр, а не что либо другое. Для примера, объявим несколько скаляров и проделаем с ними несколько стандартных операций (а ля if, while, for).
В догонку: комментарии в перл начинаются с символа #.
#!/usr/bin/perl $a = 12345; $b = 12345.67; $c = .23E-10; $hex = 0xffff; # шестнадцатеричная запись $oct = 0377; # восьмеричная запись $d = 1_234_567_890; # то же самое, что и 1234567890 print $a.$b; # Выведет "1234512345.67" print '=' x 79, "\n"; # Выведет символ "=" 79 раз, после чего символ "\n" - перевод строки $rub = "$a рублей\n"; print $rub; # Выведет "12345 рублей", перевод строки $a -= 12300; # теперь $a равен 45ти if($a){ # $a не 0 и не "0", и не "", и не undef, то есть - истина! print "Привет из 1ого if'а" } while($a){ # пока $a не станет равен 0 (в результате $a--) print --$a } print "привет из unless'а" unless $a; # unless - это if not. # Сама конструкция может быть записана как unless($a){print "привет из unless'а"}, # но это не красиво![]()
Что нового мы могли увидеть в этом коде? Для тех, кто ещё не знаком с конкатенацией(сложением строк) мог быть непонятен оператор . (точка). Он складывает строки(склеивает), оператор умножение строки на число, думаю, так же мог создать несколько вопросов. Оператор «x» берёт слева строку и повторяет её указанное справа число раз. Как можно уже было заметить, все операции в перл заканчиваются точкой с запятой. Однако, точка с запятой необязательна в некоторых случаях:
- Если операция последняя в блоке(блок — всё то, что стоит между «{» и «}»)
- Если операция последняя в файле
Так же можно было заметить, что 1ый комментарий нам ничего не объяснял… Задачей его было объяснить операционной системе через что запускать данный файл. В данном случае мы запускаем через исполняемый файл, находящийся по адресу /usr/bin/perl. Эту строчку можно и не писать, но тогда запускать файл придётся из консоли с прямым указанием на программу, которая будет интерпретировать наш код, то есть так:
Unix-way:
~$ perl example1.pl
в случае, если наш код сохранён в файл ~/example1.pl или же, при наличии первого комментария можно запускать так:
~$ ./example1.pl
или даже 2мя кликами по файлу(в графической оболочке), но для данного кода смысла в этом мало — всё выполнится и сразу исчезнет.
В Windows всё сделано через одно место, а именно через расширение файла (.pl), поэтому можно опять же дважды кликнуть или же пойти в консоль и набрать там
> perl example1.pl
или даже
> example1.pl
и увидеть работу нашего первого скрипта.
Кстати, если вы ещё не заметили, в переменную $a мы клали число, а пользовались при конкатенации уже строкой. Во время if’a $a вообще становилась логическим значением… И это всё «бесплатно» — без всяческих конвертов и явных преобразований типов. Перл сам знал что нам надо и тихо, мирно конвертировал переменную в тот тип, который нам нужен в данный момент. Вот такой вот умный зверь!
Но для того, чтобы он нас понимал, мы должны так же понимать и его: к примеру, когда мы преобразовываем скаляр в логическое выражение, мы должны понимать, что всё правда(истина), кроме пустой строки, нуля, строки «0″ и специального значения undef — не определён. Создать скаляр, значения undef проще простого: undef $a или $a = undef.
Ok. Теперь у нас есть возможность пользоваться переменными — элементами, но если нам надо использовать множество таких… Иначе говоря массив элементов. Для этих целей в перл есть тип данных «массив». Его опять же никак не надо описывать… просто используй! @a = (0,1,2,3,4); опять же символ @ здесь непросто для красоты, а указывает на то, что это массив! В данном примере мы присвоили первым 5ти элементам массива цифры от 0 до 4. И опять несколько примеров:
#!/usr/bin/perl @a = 0..9; # забили первые 10 элементов массива цифрами от 0 до 9 print $a[2]; # напечатали 2ой элемент массива. Почему здесь $ а не @? # всё логично: используем мы не массив, а элемент, пусть даже массива... print @a[2..6]; # а вот здесь как раз @, потому как и печатаем мы не элемент, # а подмассив (кусок массива, слайс) со 2ого по 6ой элемент print for @a; # Ещё один классный пример того, как перл понимает на с полу слова# если для кого не очевидно, что здесь происходит - объясняю: # для каждого элемента массива @a напечатать его. while(@a){ # пока массив не пуст print pop @a # напечатать то, что выпихнул pop из конца массива } # так как pop уменьшает массив, то и из цикла мы выйдем
3ий и последний тип данных — хеш(hash), произносится как «хэш». Так же его можно назвать ассоциативным массивом. Мы его пока можем представлять, как некий массив, где элемент мы получаем не по числу — номеру элемента, а по строке — ключу хеша.
Объявляется хеш так: %h = (color => ‘red’, width => ’10px’, height => ’100px’); процент указывает на то, что это хеш. В него мы передаём массив из 6ти элементов, каждый чётный воспринимается как значение, а нечётный — как ключ. То есть по ключу color мы получим значение red. Может показаться странной конструкция color => ‘red’. Мы могли это так же записать как «color»,’red’. Правда у => есть ещё пара козырей: он сначала выполнит то, что слева(если это команда), после этого заменит все переменные их значениями, как это делают двойные кавычки. К слову:
print '@a'; # выведет "@a"
print "@a"; # выведет содержимое массива @a
Пара примеров с хешами:
#!/usr/bin/perl %h = ( color => 'red', width => '10px', height => '100px' ); print $h{'color'}; # и опять скаляр, только скобочки уже # не квадратные(как у обычного массива), а фигурные print "\n$_ => ",$h{$_} for keys %h; # Для неподготовленного человека это может показаться просто кракозяброй, # Но мы уже кое-что знаем и можем понять смысл этой команды за исключением 2х моментов. # 1. keys - функция, возвращающая массив ключей поданного на вход хеша # 2. скаляр $_ - это переменная "по умолчанию". Проще говоря, это то, о чём сейчас речь, # в данном случае речь идёт об элементе массива ключей(на каждом шаге цикла о разном). # $_ - первая специальная переменная из множества, заложенных в перл.
К следующему шагу: Простые примеры.