Учебное пособие по Perl: переменная, массив, хеши с примером программирования
Что такое Перл?
Perl — это интерпретируемый динамический язык программирования высокого уровня общего назначения. Термин Perl означает «Практический язык извлечения и отчетности», хотя аббревиатуры Perl не существует. Он был представлен Ларри Уоллом в 1987 году. Язык Perl был специально разработан для редактирования текста. Но теперь он широко используется для различных целей, включая системное администрирование Linux, сетевое программирование, веб-разработку и т. д.
Давайте скажем это по-простому. Хотя компьютеры понимают только 0 и 1 (двоичный язык/машинный язык/[язык низкого уровня]), нам, людям, очень сложно программировать на двоичном языке. Perl — это язык программирования, который использует элементы естественного языка, слова, которые используются в обычном английском языке и, следовательно, его легче понять людям.язык высокого уровня]. Теперь есть проблема; компьютеры не могут понимать языки высокого уровня, которые мы, люди, легко понимаем. Для этого нам нужно что-то, что может перевести язык высокого уровня на язык низкого уровня. Здесь нам на помощь приходит переводчик. Интерпретатор — это часть программного обеспечения, которая преобразует программу, написанную на языке высокого уровня, в язык низкого уровня, чтобы компьютер мог понять и выполнить инструкции, написанные в программе. Следовательно, Perl является интерпретируемый язык программирования.
Где используется Perl?
Возможности языка сценариев Perl можно реализовать во многих областях. Наиболее популярное использование Perl — веб-разработка. Perl также используется для автоматизации многих задач на веб-серверах и других задач администрирования. Он может автоматически генерировать электронные письма и очищать системы. Perl по-прежнему используется по своему первоначальному назначению, то есть для извлечения данных и создания отчетов. Он может создавать отчеты об использовании ресурсов и проверять наличие проблем безопасности в сети. По этой причине Perl стал популярным языком, используемым в веб-разработке, сетевых технологиях и биоинформатике. Помимо всего этого, Perl также можно использовать для программирования CGI.
Perl также можно использовать для создания и обработки изображений. Помимо этого, сетевое взаимодействие через telnet, FTP и т. д., создание графического пользовательского интерфейса, электроника VLSI и создание почтовых фильтров для сокращения спама — вот некоторые примеры использования Perl.
Perl также известен реализацией практик ООП (объектно-ориентированного программирования) и поддерживает все формы наследования (простое, множественное и ромбовидное), полиморфизм и инкапсуляцию. Perl достаточно гибок для поддержки процедурных и ООП практик одновременно. Perl также имеет дополнительные модули, которые позволяют вам писать или использовать/повторно использовать код, написанный на Python, PHP, PDL, TCL, Октава, Java, С, C++, Basic, Ruby и Lua в вашем Perl-скрипте. Это означает, что вы можете комбинировать Perl с этими дополнительными языки программирования скорее переписывание существующего кода.
Приложения языка программирования Perl
Зачем использовать Perl?
Это правда, что существуют и другие языки программирования, которые можно использовать для выполнения всего того, что было сказано выше, тогда почему вам следует использовать именно Perl? Perl очень легко выучить, особенно если у вас есть опыт компьютерного программирования. Perl был разработан так, чтобы людям было легко писать и понимать его, а не упрощать его обработку компьютерами. Он использует регулярные выражения. Его естественный стиль языка отличается от других языков программирования, использующих определенную грамматику и синтаксис; поэтому Perl очень гибок и не навязывает вам какой-либо особый способ обдумывания решения или проблемы. Perl чрезвычайно портативен. Он может работать на любой операционной системе, в которой установлен интерпретатор Perl, поэтому он не зависит от платформы. Все Linux OperaСистемы ting поставляются с установленным Perl, поэтому вы можете начать писать код на Perl в Linux из коробки. Это не похоже на скрипты Shell, где код меняется в зависимости от используемого дистрибутива Linux, что делает его все менее и менее переносимым Небольшие конкретные задачи в Perl становятся очень простыми и быстрыми.. В этом руководстве по Perl для начинающих вы узнаете, как писать небольшие быстрые программы для конкретных задач. Давайте возьмем простой пример классической программы Hello World, которая используется для начала изучения любого языка программирования, в основе которого лежит UNIX:
Пример: Perl, привет, мир.
#!/usr/bin/perl print "Hello, world!";
Вывод:
Привет, мир!
Две приведенные выше строки кода выведут Hello, world! Разве это не было слишком просто и быстро? Студенты со знанием С, C++ будет знать, что для получения того же результата на этих языках требуется гораздо больше строк кода.
Вам может быть интересно, почему Perl настолько известен в Интернете. Это просто, поскольку большинство вещей, происходящих в сети, имеют ТЕКСТ, а Perl очень хорош в обработке текста. Если мы сравним Perl с любым из языков, то Perl будет лучшим языком, который хорош в обработке файлов, обработке текста и выводе отчетов.
Одним из лучших преимуществ Perl является то, что он бесплатно использовать
Сообщество Perl твердо верит, что программное обеспечение должно быть свободно доступным, свободно модифицируемым и свободно распространяемым. Несколько волонтеров из сообщества Perl стремятся сделать язык программирования как можно лучше.
Преимущества и недостатки Perl
Плюсы: | Минусы: |
---|---|
|
|
|
|
Давайте начнем
Имея достаточные знания об истории Perl и основных понятиях компьютерного программирования, необходимых для кодирования на Perl, пришло время погрузиться и начать работу с Perl. Следующая глава научит вас, как настроить Perl в вашей системе и подготовиться к путешествию по программированию на Perl. В этом руководстве по написанию сценариев Perl в качестве ОС, которую студенты будут использовать для программирования на Perl, будет использоваться Linux.
Загрузите и установите Perl – Windows, Mac и Linux
Как получить Перл?
Хорошие новости оно у тебя наверняка есть!
Но если вы не можете найти его в своей системе, вы все равно можете получить его бесплатно.
Чтобы узнать, установлен ли у вас Perl, зайдите в командную строку и введите: perl -v
Команда отобразит версию Perl, если она установлена. В данном случае это версия v5.14.2. Но если нет… не паникуйте…
Юникс |
Уже установлено Поставляется с предустановленным Perl, хотя вам может потребоваться обновить его до последней версии. |
Mac OS |
Уже установлено OSX поставляется с предустановленным Perl, хотя вам может потребоваться обновить его до последней версии. |
Windows |
Необходимо установить Доступны два варианта
|
Обновление Perl в Linux:
Если вам нужно обновить версию Perl, просто введите одну строку команды
sudo apt-get установить Perl
И расслабься. Об остальном позаботятся. Просто убедитесь, что у вас есть активное подключение к Интернету.
Установите Perl для Windows:
Сначала загрузите Active Perl отсюда ссылке.. Выполните следующие действия, чтобы установить ActivePerl на Windows система. То же самое смотрите на скриншотах ниже.
Шаг 1: После загрузки установщика и начала установки вы увидите окно ниже. Нажмите «Далее», чтобы продолжить.
Шаг 2: Примите лицензионное соглашение, чтобы продолжить установку.
Шаг 3: Ниже приведены различные пакеты, которые будут установлены. По умолчанию будут выбраны все. Единственное отличие — это PPM (менеджер пакетов Perl). Это утилита, предоставляемая Active Perl для установки внешних модулей или библиотек Perl в вашу систему. Нажмите «Далее», чтобы продолжить.
Шаг 4: Это различные типы расширений Perl, которые можно использовать для Perl. В основном мы будем использовать .Pl, .Plx и .Pm для Perl. Модули Perl в основном используют .Pm в качестве расширения файла для ссылки на файл библиотеки. Выберите все параметры и нажмите кнопку «Далее».
Шаг 5: Нажмите кнопку «Установить», чтобы продолжить установку.
Шаг 6: После установки выполните команду Perl –v, чтобы проверить, успешно ли установлен Perl в вашей системе.
Есть много вещей, которые необходимо обсудить для настройки среды Perl как в Linux, так и в Linux. Windows, так как в эту установку не будет включено много файлов библиотеки. Вам необходимо вручную установить их. Вы можете установить их вручную, используя CPAN (Comprehensive Perl Archive Network) или PPM, который работает только для окон Perl. Но эти файлы не являются обязательными для начала кодирования на Perl.
Помимо этой настройки Windows вы можете использовать Windows Новая функция подсистемы Linux 10 поверх Windows и ее использование для запуска кода Perl
Первая программа Perl
Hello world!
Пример Perl: Привет, мир
#!/usr/bin/perl -w #this is just a comment… print "Hello World";
Не волнуйтесь, если вы не понимаете этот текст. Скоро все станет ясно. Давайте посмотрим на это построчно:
#!/usr/bin/perl
Это говорит Operating System выполнить этот файл с помощью программы, расположенной в /usr/bin/perl. Некоторым IDE эта строка не нужна. Если это важно, вы должны написать здесь путь к вашему интерпретатору. Помнить! Эта специальная строка должна находиться в начале вашей программы и начинаться с #! использовать предупреждения; Это еще одна специальная команда, которая сообщает интерпретатору отображать любые предупреждения, например -w, который активирует предупреждения глобально.
print "Hello World";
Инструкция печати выводит текст на экран. Точка с запятой в конце строки сообщает интерпретатору Perl, что инструкция завершена. Вы должны ставить точку с запятой в конце каждой инструкции в коде Perl. Обратите внимание на кавычки («). Это необходимо для печати инструкции. Сохраните приведенный выше скрипт как firstprog.pl.
On Windows
Если у вас установлен Strawberry, вы можете просто нажать «Выполнить». Вы также можете запустить интерфейс командной строки и написать в консоли:
C:\> perl path\firstprog.pl
или, если perl.exe отсутствует на вашем пути:
C:\> c:\perl\bin\perl.exe firstprog.pl
В Linux / Unix
Вам просто нужно открыть Терминал и написать:
perl firstprog.pl
Если вы не можете запустить программу, убедитесь, что у вас есть право на ее запуск. Введите в терминале:
chmod +x firstprog.pl
Теперь ваша программа стала исполняемой и готова к запуску. Для выполнения напишите:
./firstprog
Установите модули cpan minus
Модули — это наборы кодов, которые используются для выполнения задач, выполняющих общие операции в нескольких программах. Если вы используете модули Perl, вам не придется переписывать коды для выполнения той же операции. Perl может использовать такие внешние библиотеки кодов. Одна из лучших библиотек — CPAN. Это означает комплексный Perl. Archive Network и содержит огромное количество модулей Perl для вашего использования. Это сообщество или сеть большого числа разработчиков, которые вносят такие модули. Установив поддержку модулей CPAN в свой модуль perl, вы сможете использовать модули CPAN и облегчить себе работу. Большинство модулей Perl написаны на Perl, некоторые используют XS (они написаны на C), поэтому требуется компилятор C (эту настройку легко получить — не паникуйте). Модули могут иметь зависимости от других модулей (почти всегда на CPAN) и не могут быть установлены без них (или без определенной их версии). Стоит внимательно прочитать документацию по параметрам ниже. Многие модули на CPAN теперь требуют последнюю версию Perl (версии 5.8 или выше). Установите cpanminus скрипт для получения, распаковки, сборки и установки модулей из CPAN, чтобы упростить установку других модулей (вы скажете нам спасибо позже). Чтобы установить App-cpanminus perl-модули, в командной строке введите:
cpan App::cpanminus
cpan App::cpanminus Убедитесь, что у вас есть подключение к Интернету во время загрузки и установки модулей Perl.
Теперь установите любой модуль:
cpan –i <Module_Name>.
Давайте посмотрим пример установки модуля File::Data(это интерфейс для доступа к данным файла).
Переменная Perl
Теперь поговорим о переменных. Вы можете представить переменную как своего рода контейнер, который содержит одно или несколько значений. После определения имя переменной остается прежним, но значение или значения меняются снова и снова.
Существует 3 типа переменных:
Типы переменных в Perl
Самые простые из них — скаляры, и это наша сегодняшняя тема.
Скалярная переменная
Переменная этого типа содержит одно значение.
Его имя начинается со знака доллара и идентификатора Perl (это имя нашей переменной).
Скалярная переменная в Perl
Соглашение об именовании
Если вы знакомы с другими языками программирования, то знаете, что существуют определенные правила именования переменных. Аналогично, в Perl есть три правила именования скаляров.
- Все скалярные имена начинаются с $. Легко запомнить, что каждое имя должно иметь префикс $. Думайте об этом как о скаляре $.
- Как PHP. после первого символа $, который в Perl является специальным, допускаются буквенно-цифровые символы, т.е. от a до z, от A до Z и от 0 до 9. Также допускается символ подчеркивания. Используйте подчеркивание, чтобы разделить имена переменных на два слова. «Но первый символ не может быть числом»
- Хотя цифры могут быть частью имени, они не могут идти сразу после $. Это подразумевает, что первым символом после $ будет либо алфавит, либо подчеркивание. Те, которые идут от C/C++ Фон должен быть в состоянии сразу распознать сходство. Примеры
Пример Perl:
$var; $Var32; $vaRRR43; $name_underscore_23;
Однако это недопустимые имена скалярных переменных.
mohohoh # $ character is missing $ # must be at least one letter $47x # second character must be a letter $variable! # you can't have a ! in a variable name
Общее правило гласит: если в Perl есть только один объект, то это скаляр. Скаляры можно считывать с устройств и использовать их в наших программах.
Два типа скалярных типов данных
- Numbers
- Струны
Numbers:
В этом типе скалярных данных мы могли бы указать:
- целые числа, просто это целые числа, например 2, 0, 534
- числа с плавающей запятой, это действительные числа, например 3.14, 6.74, 0.333
Примечание. В общем, интерпретатор Perl воспринимает целые числа как числа с плавающей запятой. Например, если вы напишете 2 в своих программах, Perl увидит это как 2.0000.
Целочисленные литералы:
Он состоит из одной или нескольких цифр, которым может предшествовать плюс или минус и содержать символы подчеркивания.
Примеры Перла:
0; -2542; 4865415484645 #this also can be written with underscores (for clarity) : 4_865_415_484_645
Как видите – ничего особенного. Но поверьте, это самый распространенный тип скаляров. Они повсюду.
Литералы с плавающей запятой:
Он состоит из цифр, необязательно минуса, десятичной точки и показателя степени.
Примеры Перла:
3.14; 255.000; 3.6e20; # it's 3.6 times 10 to the 20th -3.6e20; # same as above, but negative -3.6e-20; #it's negative 3.6 times 10 to the -20th -3.6E-20; #we also can use E – this means the same the lowercase version -3.6e-20
Восьмеричное, шестнадцатеричное и двоичное представление:
Это альтернатива десятичной системе. Позвольте мне показать вам восьмеричное, шестнадцатеричное и двоичное представление. В небольшой таблице представлена вся важная информация об этих странных стилях:
Представление | Система исчисления | Продолжил |
---|---|---|
восьмеричный | 8 | 0 (ноль) |
Шестнадцатеричная | 16 | 0x |
Двоичный | 2 | 0b |
Примеры Перла:
255; # 255 in decimal notation 0377; # 255 in octal notation 0xff; # 255 in hexadecimal notation 0b11111111; # 255 in binary notation
Все эти значения для Perl означают одно и то же. Perl не хранит значения в одном и том же формате. Он внутренне преобразует эти шестнадцатеричные, двоичные, восьмеричные значения в десятичные.
Присваивание — наиболее распространенная операция над скаляром, и она очень проста. Perl использует для этого знак равенства. Он принимает значение выражения с правой стороны и помещает это значение в нашу переменную.
Давайте рассмотрим примеры:
$size=15; # give $size value of 15 $y = -7.78; # give $y value of -7.78
Более того, в переменную можно поместить не только число, но и выражение.
$z = 6 + 12 # give $z value of 18
Струны
Строки: это также очень простой тип скаляра.
Максимальная длина строки в Perl зависит от объема памяти компьютера. Размер строки не ограничен, строки могут составлять любое количество символов, символов или слов. Самая короткая строка не содержит символов. Самый длинный может заполнить всю системную память. Программы Perl могут быть полностью написаны с использованием 7-битного набора символов ASCII. Perl также позволяет добавлять любой 8-битный или 16-битный набор символов. символы, отличные от ASCII, в строковых литералах. В Perl также добавлена поддержка Unicode UTF-8.
Как и числа, существуют два разных типа строк:
- Строковые литералы в одинарных кавычках
- Double кавычки строковых литералов
Строковые литералы в одинарных кавычках
Одинарные кавычки используются для заключения данных, которые вы хотите понимать буквально. Короткий пример и все должно быть понятно:
Примеры Перла:
#!/usr/bin/perl $num = 7; $txt = 'it is $num'; print $txt;
Вывод:
это $num
Здесь из-за одинарных кавычек значение $num не берется, а к значению $txt добавляются литеральные символы «$», «n», «u» и «m».
Doubleстроковые литералы в кавычках
Double Кавычки используются для заключения данных, которые необходимо интерполировать перед обработкой. Это означает, что экранированные символы и переменные не просто буквально вставляются в последующие операции, а оцениваются на месте. Экранированные символы могут использоваться для вставки новых строк, табуляции и т. д.
Примеры Перла:
$num = 7; $txt = "it is $num"; print $txt;
Вывод:
это 7
Здесь из-за двойных кавычек значение $num добавляется к значению $txt.
Double-кавычки интерполируют скалярные и массивные переменные, но не хэши. С другой стороны, вы можете использовать двойные кавычки для интерполяции срезов как массивов, так и хэшей.
Таинственный \n
Рассмотрим следующую программу
Примеры Перла:
print "hello \n";
Вывод:
Здравствуйте
Perl отображает не просто «привет\n», а только «привет». Почему? Потому что «\n» — это специальный знак и означает, что вы хотите перейти на новую строку при отображении текста в вашей программе. напечатайте «привет\n новая строка»; Следующий вопрос – есть ли еще какие-то особые знаки? Да, они! Но не волнуйтесь — всего несколько. Проверьте таблицу ниже
Строить | Описание |
---|---|
\n | новая линия |
\r | возвращают |
\t | таб |
\f | подача формы |
\b | возврат на одну позицию |
\a | колокол |
\e | бежать |
\ 007 | любое восьмеричное значение ASCII (здесь 007 = колокольчик) |
\ x7f | любое шестнадцатеричное значение (здесь 7f = удалить) |
\\ | обратный слэш |
\ ” | двойная цитата |
\l | следующая буква строчная |
\L | все последующие буквы до \E будут строчными |
\u | следующая буква в верхнем регистре |
\U | все последующие буквы до \E регистрируются прописными буквами |
\E | Завершить \L, \U |
Я знаю, их не «всего несколько»… Но поверьте мне, вы должны знать всего лишь
Строковые переменные
Это та же операция, которую мы видим при присвоении чисел. Perl получает нашу строку справа от знака равенства и помещает эту строку в переменную.
Примеры Перла:
$string = 'tutorial'; # give $string the eight-character string 'tutorial' print $string; $string = $size + 3 ; # give $string the current value of $size plus 3 print $string; $string = $ string * 5; # multiplied $string by 5 print $string;
Вывод:
учебник315
Как видите, вы можете помещать числа и строки в одни и те же переменные. Нет класса переменных.
Конкатенация строк (точка):
Оператор конкатенации «.» объединяет две или более строк. Помнить! Если строка содержит кавычки, возврат каретки, обратную косую черту, все эти специальные символы необходимо экранировать обратной косой чертой.
Переменная Perl Примеры:
#!/usr/bin/perl $a = "Tom is"; $b = "favorite cat"; $c = $a ." mother's ". $b; print $c;
Вывод:
Том — любимый кот матери
Струны
«$a», «$b» объединяются и сохраняются в «$c» с помощью «.» оператор.
В конце…
Преобразование между Numbers и строки:
Как вы знаете, Perl автоматически преобразует числа в строки по мере необходимости. Откуда Perl узнает, что нам нужно прямо сейчас? Это просто - все зависит от оператора (сейчас мы поговорим об операторах позже, просто учтите, что операторов много, разных для чисел и строк). Если оператор ожидает число, Perl будет использовать значение как число. . Если оператор ожидает строку, Perl будет использовать это значение как строку. Другими словами, вам не нужно беспокоиться о таком преобразовании. Короткий пример и все должно быть понятно:
Примеры Перла:
$string = "43"; $number = 28; $result = $string + $number; print $result;
Вывод:
71
значение $string преобразуется в целое число и добавляется к значению $number.
Результат сложения, 71, присваивается переменной $result.
Область действия переменной – модификаторы доступа
Мы можем объявить скаляр в любом месте программы. Но вам нужно указать модификатор доступа
Существует 3 типа модификаторов.
- my
- локальным
- наши
My: Используя это, вы можете объявить любую переменную, специфичную для блока. т.е. внутри фигурных скобок.
#!/usr/bin/perl my $var=5; if(1) { my $var_2 =$var; } print $var_2;
Нет выхода
На выходе программы ничего не будет!
В приведенном выше примере вы увидите, что объявлены две переменные: одна находится внутри блока if ($var_2), а другая — вне блока if ($var). Переменная, объявленная вне блока, будет доступна блоку if, но переменная, объявленная внутри блока if, не будет доступна внешней программе.
Локально: используя это, мы можем фактически замаскировать одни и те же значения переменной в разные значения, фактически не меняя исходное значение переменной. Предположим, у нас есть переменная $a, для которой присвоено значение 5, вы можете фактически изменить значение этой переменной с помощью повторное объявление той же переменной с использованием ключевого слова local без изменения исходного значения переменной, равного 5. Давайте посмотрим, как это работает, на примере.
#!/usr/bin/perl $var = 5; { local $var = 3; print "local,\$var = $var \n"; } print "global,\$var = $var \n";
Вывод вышеуказанной программы будет таким.
местный, $var = 3
глобально, $var = 5
Таким образом, мы можем изменить значение переменной, не затрагивая исходное значение.
Our: как только переменная объявлена с модификатором доступа «our», ее можно использовать во всем пакете. Предположим, у вас есть модуль Perl или пакет test.pm, в котором объявлена переменная с областью действия Our. Доступ к этой переменной можно получить в любых сценариях, которые будут использовать этот пакет.
Если вы серьезно относитесь к программированию на Perl, вам следует начать свою программу с
#! / usr / local / bin / perl
использовать строго;
Это поможет вам писать более качественный и чистый код. «use strict» включает строгую прагму, которая заставит вас объявлять переменные с помощью моего ключевого слова.
Это хорошая практика программирования
#!/usr/local/bin/perl use strict; $var = 10; print "$var";
Результат: Ошибка
#!/usr/local/bin/perl use strict; my $var = 10; print "$var";
Вывод:
10
Перл-массив
Что такое Perl-массив?
Массив — это особый тип переменной, в которой данные хранятся в виде списка; Доступ к каждому элементу можно получить с помощью индексного номера, который будет уникальным для каждого элемента. В массиве можно хранить числа, строки, плавающие значения и т. д. Выглядит великолепно. Так как же нам создать массив в Perl? В Perl вы можете определить массив, используя символ «@», за которым следует имя, которое вы хотите дать. Давайте рассмотрим определение массива в Perl.
мой @array;
Вот как мы определяем массив в Perl; вы можете подумать, как нам нужно хранить в нем данные. Существуют разные способы хранения данных в массиве. Это зависит от того, как вы собираетесь его использовать.
my @array=(a,b,c,d); print @array;
Вывод:
ABCD
Это массив из 4 элементов.
Индекс массива начинается с 0 и заканчивается до максимального заявленного размера, в этом случае максимальный размер индекса равен 3.
Пример Perl-массива
Вы также можете объявить массив указанным выше способом; единственное отличие состоит в том, что данные сохраняются в массиве, считая пробел в качестве разделителя. Здесь qw() означает слово кавычки. Значение этой функции заключается в создании списка слов. Вы можете использовать qw несколькими способами для объявления массива.
@array1=qw/a b c d/; @array2= qw' p q r s'; @array3=qw { v x y z}; print @array1; print @array2; print @array3;
Вывод:
abcdpqrsvxyz
Предположим, вы хотите присвоить значение 5th элемент массива, как мы собираемся это сделать.
$array [4] = 'е';
Последовательный массив
Последовательные массивы — это массивы, в которых данные хранятся последовательно. Предположим, вы хотите сохранить в массиве от 1 до 10 чисел или алфавитов az. Вместо того, чтобы вводить все буквы, вы можете попробовать что-то вроде ниже —
@numbers= (1..10); print @numbers; #Prints numbers from 1 to 10;
Вывод:
12345678910
Размер массива Perl
У нас есть массив, который уже доступен, и вы не знаете, каков размер этого массива, и как его можно найти.
@array= qw/a b c d e/; print $size=scalar (@array);
Можем ли мы получить размер массива без использования функций? Да мы можем.
@array= qw/a b c d e/; print $size=scalar (@array); print "\n"; print $size=$#array + 1; # $#array will print the Max Index of the array, which is 5 in this case
Вывод:
5
5
Динамический массив
Вышеупомянутый метод объявления массива называется статические массивы, где вы знаете размер массива.
Что такое динамический массив?
Динамические массивы — это массивы, которые вы объявляете, не указывая для них никакого значения. Так когда же именно мы сохраняем значения в этом массиве? Все просто: мы сохраняем их во время выполнения. Вот простая программа для этого.
Для выполнения этой задачи мы будем использовать некоторые встроенные функции Perl.
my $string="This is a kind of dynamic array"; my @array; @array=split('a',$string); foreach(@array) { print "$_ \n”; # This is a special variable which stores the current value. }
Вывод:
Это
своего рода Дин
микрофон
rr
y
Функция разделения разбивает содержимое строки на массив на основе предоставленного ей разделителя. Эта функция также удалит из строки разделитель, в данном случае это «а»;
Push, Pop,shift, unshift для массивов Perl:
Эти функции можно использовать в Perl для добавления/удаления элементов массива.
- Perl Push: добавляет элемент массива в конец существующего массива.
- Perl Pop: удаляет последний элемент из массива.
- Perl Shift: удаляет первый элемент из массива.
- Perl Unshift: добавляет элемент в начало массива.
Давайте посмотрим пример, где мы можем использовать приведенные ниже функции.
@days = ("Mon","Tue","Wed"); print "1st : @days\n"; push(@days, "Thu"); # adds one element at the end of an array print "2nd when push : @days\n"; unshift(@days, "Fri"); # adds one element at the beginning of an array print "3rd when unshift : @days\n"; pop(@days); print "4th when pop : @days\n"; # remove one element from the last of an array. shift(@days); # remove one element from the beginning of an array. print "5th when shift : @days\n";
Вывод:
1-е: Пн Вт Ср
2-й при нажатии: Пн Вт Ср Чт
3-е место при отмене смены: Пт Пн Вт Ср Чт
4-е место по популярности: пт, понедельник, вторник, среда.
5-е число в смену: Пн Вт Ср
Перл-хеши
Зачем нам нужен Хэш?
Мы уже узнали о скалярах и массивах в предыдущих разделах.
Что именно делают скаляры? Он хранит только целые числа и строки.
Что именно делают массивы? Это набор скаляров, в котором вы получаете доступ к каждому элементу массива с помощью индексов. Но стоит ли использовать массив, когда у вас сотни и тысячи записей? Мы забудем, какой индекс имеет какое значение. Чтобы преодолеть эту ситуацию, у нас есть что-то вроде хеша Perl.
Что такое хэши?
Хэш также может содержать столько скаляров, сколько может содержать массив. Единственная разница в том, что у нас нет индекса, а есть ключи и значения. Хэш можно объявить, начиная с %, за которым следует имя хеша. Давайте посмотрим на примере, как мы можем определить хэш Perl и как отличить его от массива.
Рассмотрим пример трех человек, и их возраст представлен в массиве.
@array=('Sainath',23,'Krishna',24,'Shruthi',25); #This is how an array looks. print @array;
Вывод:
Сайнатх33Krishna24Шрути25
Таким образом, трудно узнать индивидуальный возраст, поскольку нам нужно запомнить как индексные местоположения, так и имена и возраст всех людей. Это может быть просто, когда у вас 3 имени, но когда у вас 1000 или больше? Ты знаешь ответ.
Это мы можем преодолеть с помощью хеша.
Пример хеша:
print %hash=( 'Sainath' => 23, 'Krishna' => 24, 'Shruthi' => 25); # This is how we create a hash. print %hash=('Sainath',23,'Krishna',24,'Shruthi',25);# This way of assigning is called list.
Вывод:
Сайнатх33Krishna24Шрути25Саинатх33Krishna24Шрути25
Теперь мы объявили хеш, отлично!! Но как нам получить к нему доступ или распечатать его? Доступ к каждому элементу хеша должен осуществляться с помощью связанного с ним ключа, которому будет присвоено значение. Таким образом, между каждым ключом и значением в хеше существует сопоставление «один-один».
Чтобы напечатать возраст любого человека, вам просто нужно запомнить имя этого человека.
print $hash{'Krishna'}; # This how we should access a hash. Key enclosed within {}.
Вы могли задаться вопросом, почему я использовал $hash{KeyName}, помните, что хэш — это снова набор скаляров. Итак, мы можем использовать $, который представляет скаляр для доступа к каждому элементу хэша.
Примечание. Каждый ключ в хэше должен быть уникальным, иначе он переопределит ваше значение, назначенное ранее.
Как мы можем присвоить хеш другому хешу? Просто, так же, как мы делаем для
Мы также можем распечатать весь хэш.
%hash=( 'Tom' => 23); %newHash=%hash; # Assigning hash to a new hashprint %newHash; print %newHash;
Вывод:
Tom23
Добавить Perl-хеши
Как видите, у нас уже есть хеш %newHash, и теперь нам нужно добавить в него еще записи.
$newHash{'Jim'}=25; $newHash{'John'}=26; $newHash{'Harry'}=27; print %newHash;
Вывод:
Джим25Джон26Гарри27
Ключ удаления Perl
Возможно, вы захотите удалить запись из хеша. Вот как мы можем это сделать.
delete $newHash{'Jim'};#This will delete an entry from the hash.
Удалить — встроенная функция Perl. Здесь мы увидим пример присвоения хеша массиву.
@array=%newHash; print "@array";
Примечание. Всякий раз, когда вы печатаете хэш или сохраняете хэш в массиве. Порядок всегда может отличаться. Это не всегда одно и то же.
Мы можем назначить массиву только ключи или значения хеша.
@arraykeys= keys(%newHash); @arrayvalues=values(%newHash); print "@arraykeys\n"; print "@arrayvalues\n"; # \n to print new line.
Чтобы удалить все записи в хеше, мы можем напрямую присвоить хешу значение null.
%newHash=();# Это переопределит хэш без записей.
Условные операторы Perl
Мы можем использовать условные операторы в Perl. Итак, что же такое условные утверждения? Условные операторы — это те, в которых вы фактически проверяете некоторые обстоятельства, которые должны быть выполнены в вашем коде.
Подумайте о примере: вы покупаете фрукты, и вам не нравится, что цена превышает 100 долларов. Итак, правило здесь — 100 баксов.
Perl поддерживает два типа условных операторов; они если и если.
Перл Если
Если блок кода будет выполнен, когда условие истинно.
my $a=5; if($a==5) { print "The value is $a"; }
Вывод:
5
Perl, если еще
Это выглядит хорошо. Давайте подумаем о ситуации, когда $a не равно 5.
my $a=10; if($a==5) { print "The values is $a ---PASS"; } else { print "The value is $a ---FAIL"; }
Вывод:
Значение 10 — FAIL.
Таким образом, мы можем контролировать только одно условие одновременно. Это ограничение? Нет, вы также можете управлять различными условиями, используя if… elsif… else.
Perl Иначе Если
my $a=5; if($a==6) { print "Executed If block -- The value is $a"; } elsif($a==5) { print "Executed elsif block --The value is $a"; } else { print "Executed else block – The value is $a"; }
Вывод:
Выполненный блок elsif – значение 5.
В приведенном выше случае блок elsif будет выполнен, поскольку $a равно 5.
Могут возникнуть ситуации, когда блоки кода if и elsif не будут работать. В этом сценарии будет выполнен блок кода else. На самом деле вы можете исключить проверку кода else, если не хотите ее включать.
Perl вложенный if
В этом случае вы можете использовать блок кода if в еще одном блоке кода if.
my $a=11; #Change values to 11,2,5 and observe output if($a<10){ print "Inside 1st if block"; if($a<5){ print "Inside 2nd if block --- The value is $a"; } else{ print " Inside 2nd else block --- The value is $a"; } } else{ print "Inside 1st else block – The value is $a"; }
Вывод:
Внутри первого блока else — значение 1.
Выполните тот же код, изменив значение $a; остальное вы можете узнать.
Perl, если только
У вас уже есть представление о том, что делает if (если условие истинно, блок кода будет выполнен). Если не противоположно if, если блок кода будет выполнен, если условие ложно.
my $a=5; unless($a==5) { print "Inside the unless block --- The value is $a"; } else { print "Inside else block--- The value is $a"; }
Вывод:
Внутри первого блока else — значение 1.
Угадайте, какой будет результат. Ты прав!!!!!. Результатом будет оператор печати блока else. Поскольку условие в условии, если блок кода не является истинным, помните, что если блок кода не будет выполнен, только если условие ложно. Измените значение $a и выполните код, вы увидите разницу.
Perl Использование if
$a= " This is Perl"; if($a eq "SASSDSS"){ print "Inside If Block"; } else { print "Inside else block" }
Вывод:
Внутри блока else
Использование, если
$a= " This is Perl"; unless($a eq "SASSDSS"){ print "Inside unless Block"; } else { print "Inside else block" }
Вывод:
Внутри, если не блокировать
Циклы Perl — управляющие структуры
Perl поддерживает структуры управления, аналогичные другим языкам программирования. Perl поддерживает четыре типа управляющих структур: foreach, while и Until. Мы используем эти операторы для многократного выполнения некоторого кода.
Для цикла Perl
Блок кода будет выполняться до тех пор, пока условие не будет выполнено. Давайте рассмотрим пример того, как Perl зацикливает массив.
my @array=(1..10); for(my $count=0;$count<10;$count++) { print "The array index $count value is $array[$count]"; print "\n"; }
Вывод:
Значение индекса массива 0 равно 1
Значение индекса массива 1 равно 2
Значение индекса массива 2 равно 3
Значение индекса массива 3 равно 4
Значение индекса массива 4 равно 5
Значение индекса массива 5 равно 6
Значение индекса массива 6 равно 7
Значение индекса массива 7 равно 8
Значение индекса массива 8 равно 9
Значение индекса массива 9 равно 10
Здесь, в выражение for (), включено множество операторов. Для каждого из них есть смысл.
for (инициализация; условие; приращение)
Вот еще один способ использования for.
for(1..10) { print "$_ n"; print "\n"; }
Вывод:
1n
2n
3n
4n
5n
6n
7n
8n
9n
10n
Перл Форич
Оператор foreach можно использовать так же, как и for; Основное отличие в том, что у нас нет никакой проверки условий и приращения.
Давайте возьмем тот же пример с foreach perl.
my @array=(1..10); foreach my $value (@array) { print " The value is $value\n"; }
Вывод:
Стоимость 1
Стоимость 2
Стоимость 3
Стоимость 4
Стоимость 5
Стоимость 6
Стоимость 7
Стоимость 8
Стоимость 9
Стоимость 10
Foreach берет каждый элемент массива и присваивает это значение $var для каждой итерации. Мы также можем использовать $_ для того же самого.
my @array=(1..10); foreach(@array) { print " The value is $_ \n"; # This is same as the above code. }
Вывод:
Стоимость 1
Стоимость 2
Стоимость 3
Стоимость 4
Стоимость 5
Стоимость 6
Стоимость 7
Стоимость 8
Стоимость 9
Стоимость 10
Это выглядит хорошо для доступа к массивам. Как насчет хэшей, как мы можем получить хеш-ключи и значения, используя foreach?
Мы можем использовать foreach для доступа к ключам и значениям хеша, зацикливая его.
my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25); foreach my $key (keys %hash) { print "$key \n"; }
Вывод:
Микки
Том
Джерри
Возможно, вам интересно, почему мы использовали ключи в foreach(). Keys — это встроенная функция Perl, с помощью которой мы можем быстро получить доступ к ключам хеша. Как насчет ценностей? Мы можем использовать функцию значений для доступа к значениям хеша.
my %hash=( 'Tom' => 23, 'Jerry' => 24, 'Mickey' => 25); foreach my $value(values %hash) # This will push each value of the key to $value { print " the value is $value \n"; }
Вывод:
значение равно 24
значение равно 23
значение равно 25
Perl Пока
Цикл Perl While представляет собой структуру управления, в которой блок кода будет выполняться до тех пор, пока условие не станет истинным.
Блок кода завершится только в том случае, если условие ложно.
Давайте рассмотрим пример цикла Perl While.
Вот проблема, которая потребует ввода данных от пользователя и не завершится до тех пор, пока не будет указано число «7».
#!/usr/bin/perl $guru99 = 0; $luckynum = 7; print "Guess a Number Between 1 and 10\n"; $guru99 = <STDIN>; while ($guru99 != $luckynum) { print "Guess a Number Between 1 and 10 \n "; $guru99 = <STDIN>; } print "You guessed the lucky number 7"
Вывод:
Угадай число от 1 до 10
9
Угадай число от 1 до 10
5
Угадай число от 1 до 10
7
Вы угадали счастливое число 7
В приведенном выше примере условие while не будет истинным, если мы введем ввод, отличный от «7».
Если вы видите, как здесь работает while, блок кода будет выполняться только в том случае, если условие a while истинно.
Perl-во время выполнения
Цикл Do while выполнится хотя бы один раз, даже если условие в разделе while ложно.
Давайте возьмем тот же пример, используя do while.
$guru99 = 10; do { print "$guru99 \n"; $guru99--; } while ($guru99 >= 1); print "Now value is less than 1";
Вывод:
10
9
8
7
6
5
4
3
2
1
Теперь значение меньше 1
Perl до
Блок кода до тех пор, пока не будет аналогичен блоку кода в условном операторе. Здесь блок кода будет выполняться только в том случае, если условие в блоке будет ложным.
Давайте возьмем тот же пример, который мы использовали некоторое время.
Вот проблема, которая потребует ввода данных от пользователя и не завершится до тех пор, пока не будет указано имя, отличное от «sai».
print "Enter any name \n"; my $name=<STDIN>; chomp($name); until($name ne 'sai') { print "Enter any name \n"; $name=<STDIN>; chomp($name); }
Вывод:
Введите любое имя Сай
Perl делать-пока:
Do Until можно использовать только тогда, когда нам нужно, чтобы условие было ложным, и оно должно быть выполнено хотя бы один раз.
print "Enter any name \n"; my $name=<STDIN>; chomp($name); do { print "Enter any name \n"; $name=<STDIN>; chomp($name); }until($name ne 'sai');
Вывод:
Введите любое имя Говард
Введите любое имя Шелдон
Введите любое имя Сай
Выполните примеры кодов while, do- while, до и do-until, чтобы увидеть разницу.
Perl Operaтор
Что такое Operaтор?
OperaТоры на компьютерном языке обозначают действие, которое может быть выполнено над некоторым набором переменных или значений, понятных компьютеру. Perl вобрал в себя большую часть Operaторы из языка C. Perl имеет много операторов по сравнению с другими языками программирования. OperaОператоры делятся на арифметические, логические, операторы отношения и операторы присваивания.
Арифметический OperaТорс:
Арифметические операторы — это операторы, которые можно использовать для выполнения некоторых основных математических операций. Эти арифметические операторы представляют собой бинарные операторы, которым для выполнения базовой операции нам нужны два аргумента. Мы также можем использовать унарные операторы для других базовых операций; вы можете увидеть разницу в примерах ниже.
оператор | Описание | Пример |
---|---|---|
+ |
Операция сложения, используемая для добавления двух значений или переменных. холдинговые ценности |
$х=5+6; # или $у=6; $z=$x+$y; |
– |
Оператор вычитания, используемый для вычитания двух значений или переменных, содержащих значения. |
$х=6-5; # или $у=6; $z=$x-$y; |
* |
Оператор умножения, используемый для умножения двух значений или переменных, содержащих значения. |
$х=6*5; # или $у=6; $z=$x*$y; |
/ |
Оператор деления, используемый для разделения двух значений или переменных, содержащих значения. |
$х=36/6; # или $у=6; $z=$x/$y; |
** |
Экспоненциальный оператор, используемый для предоставления экспоненты и получения значения. Пример: 22 = 43 = 27 |
$х=5**5; # или $ х = 4; $у=2; $z=$x**$y; |
% |
Оператор модуля, используемый для получения напоминания во время разделения двух значений или переменных, содержащих значения. |
$х=5%2; # или $ х = 10; $у=2; $z=$x % $y; |
++ |
Оператор унарного сложения для увеличения значения переменной на 1 |
$ х = 5; $ x ++; Or ++$х; |
- |
Оператор унарного вычитания для уменьшения значения переменной на 1 |
$ х = 5; $х–; # пост-декремент Or –$x;# предварительное декремент |
Пример выполнения всех вышеперечисленных операций.
my $x=10; my $y=2; my $z; $z=$x+$y; print ("Add of $x and $y is $z \n"); $z=$x-$y; print ("Sub of $x and $y is $z \n"); $z=$x*$y; print ("Mul of $x and $y is $z \n"); $z=$x/$y; print ("Div of $x and $y is $z \n"); $z=$x**$y; print ("Exp of $x and $y is $z \n"); $z=$x%$y; print ("Mod of $x and $y is $z \n");
Вывод:
Сложение 10 и 2 равно 12.
Замена 10 и 2 равна 8
Муль из 10 и 2 равно 20
Деление 10 и 2 равно 5
Опыт 10 и 2 равен 100
Мод 10 и 2 равен 0
Назначение OperaТорс:
Операторы присваивания просто присваивают значения переменным, но здесь нужно помнить еще одну вещь: операторы присваивания также выполняют арифметические операции и присваивают новое значение той же переменной, над которой выполняется операция.
оператор | Описание | Пример |
---|---|---|
+= |
Оператор сложения, используемый для добавления и присвоения значения одной и той же переменной. |
$ х = 4; $х+=10; |
-= |
Оператор вычитания, используемый для вычитания и присвоения значения одной и той же переменной. |
$ х = 4; $х-=10; |
*= |
Оператор умножения, используемый для добавления и присвоения значения одной и той же переменной. |
$ х = 4; $х*=10; |
/= |
Оператор деления, используемый для деления и присвоения значения одной и той же переменной. |
$ х = 4; $х/=10; |
знак равно |
Экспоненциальный оператор, используемый для получения показателя степени и присвоения значения одной и той же переменной. |
$ х = 4; $х**=10; |
%= |
Оператор модуля, используемый для получения напоминания во время деления и присвоения значения той же переменной. |
$ х = 10; $х%=4; |
Пример выполнения всех вышеперечисленных операций.
my $x=10; $x+=5; print("Add = $x\n"); $x-=5; print("Sub= $x\n"); $x*=5; print("Mul = $x\n"); $x/=5; print("Div = $x\n");
Вывод:
Добавить = 15
Суб= 10
Мул = 50
Дел = 10
Логический и реляционный OperaТорс:
Perl использует логические операторы для сравнения чисел и строк. Большую часть времени логические операторы используются в условных операторах.
Логический и реляционный OperaТоры в Perl
оператор | Описание |
---|---|
== или уравнение |
Operator используется для проверки равенства обеих переменных |
!=Или нэ |
Operator используется для проверки того, не равны ли обе переменные |
> или GT |
Operator раньше проверял, A больше, чем B |
<или лт |
Operator раньше проверял, A меньше B |
>= или ge |
Operator раньше проверял, A больше или равно B |
<= или ле |
Operator раньше проверял, A меньше или равно B |
|| или или |
Operator используется для проверки того, что A или B хранят значение |
&&или и |
OperaTor используется для проверки того, что A и B содержат значение |
Давайте возьмем пример, на котором мы можем объяснить все сценарии.
my $x=5; my $y=5; if($x == $y){ print ("True -- equal $x and $y \n"); } else{ print ("False -- not equal $x and $y\n"); } $x=6; $y=7; if($x != $y){ print ("True -- not equal $x and $y\n"); } else{ print ("False -- equal $x and $y\n"); } if($y > $x){ print ("True -- $y greater than $x\n"); } else{ print ("False -- $y greater than $x\n"); } if($x < $y){ print ("True -- $x less than $y\n"); } else{ print ("False -- $x less than $y\n"); } if($x <= $y){ print ("True -- $x less than $y\n"); } else{ print ("False -- $x less than $y\n"); } if($y >= $x){ print ("True -- $y greater than $x\n"); } else{ print ("False -- $y greater than $x\n"); }
Вывод:
Верно — равно 5 и 5
Верно — не равно 6 и 7
Верно — 7 больше 6
Верно — 6 меньше 7
Верно — 6 меньше 7
Верно — 7 больше 6
Вы можете увидеть примеры логических операторов в последующих разделах.
Специальные переменные Perl
Что такое специальные переменные Perl?
Специальные переменные в Perl — это те, которые имеют заранее определенное значение. Эти переменные обозначаются либо настоящим именем, либо символами пунктуации. У нас есть специальная переменная для всех переменных, поддерживаемых Perl, таких как специальные скалярные переменные, специальные переменные массива, специальные переменные хеширования. Большинство специальных переменных, которые мы используем, являются скалярными.
Когда мы хотим использовать специальную переменную с ее именем, нам нужно загрузить модуль Perl «use English», чтобы явно сообщить интерпретатору Perl, что мы собираемся использовать специальные переменные, используя ее имя.
Скалярные специальные переменные
Технология | Описание |
---|---|
$_$ARG |
Это переменная по умолчанию, в которой хранятся текущие значения. |
$0 или $PROGRAM_NAME |
Сохраняет имя файла сценария Perl. |
$/ |
Разделитель входных записей. По умолчанию он имеет значение '\n', которое является символом новой строки. |
$. |
Содержит текущий номер строки читаемого файла. |
$, |
Разделитель выходных полей, в основном используется оператором print(). По умолчанию значение этой переменной установлено на 0, мы можем изменить значение этой переменной. |
$\ |
Разделитель выходных записей, значение этой переменной будет пустым; мы можем присвоить этому любое значение, которое будет использоваться оператором print() при печати вывода. |
$# |
Эта переменная используется для формата вывода при печати чисел. |
$%$FORMAT_PAGE_NUMBER |
Будет хранить номер текущей страницы прочитанного файла. |
$=$FORMAT_LINES_PER_PAGE |
Будет хранить текущую длину страницы прочитанного файла. |
$-$FORMAT_LINES_LEFT |
Содержит значение количества строк, оставшихся для печати со страницы. |
$~$FORMAT_NAME |
Имя формата: сохраняет формат текущего выбранного вывода, по умолчанию — имя дескриптора файла. |
$^$FORMAT_TOP_NAME |
Содержит значение формата заголовка обработчика файла. По умолчанию значение будет _TOP, за которым следует имя дескриптора файла. |
$|$OUTPUT_AUTOFLUSH |
Значение по умолчанию — ноль; это используется для очистки выходного буфера после каждой записи() или печати(). |
$$ |
Будет хранить номер запущенного процесса интерпретатора Perl. |
$? |
Код состояния: канал и системный вызов. Возвращаемый статус выполненной команды. |
$&$MATCH |
При использовании в регулярных выражениях он будет содержать строку последнего успешного совпадения с шаблоном. |
$`$ПРЕМАТЧ |
При использовании в регулярных выражениях он будет содержать строку, которой предшествует последнее успешное совпадение с шаблоном. |
$'$POSTMATCH |
При использовании в регулярных выражениях он будет содержать строку, за которой следует последнее успешное совпадение с шаблоном. |
$+$LAST_PAREN_MATCH |
Содержит строку последней скобки, которая соответствует последнему поиску по шаблону. |
$ |
1 доллар, 2 доллара, 3 доллара…. Содержит значения шаблона, сопоставленные по порядку. |
$[ |
Первый индекс: Массив, подстрока. |
$] |
Версия Перла. |
$ ” |
Разделитель, используемый для элементов списка, по умолчанию имеет значение пробела. |
$; |
Разделитель индексов, используемый в многомерных массивах. |
$! |
В числовом контексте печатает номер ошибки. В строковом контексте выведите ошибку. |
$@ |
Будет хранить информацию о синтаксических ошибках, используемую при использовании eval(). |
$< |
Содержит реальный UID (идентификатор пользователя) процесса, выполняющего скрипт. |
$> |
Содержит эффективный UID процесса, выполняющего сценарий. |
$( |
Содержит реальный GID (идентификатор группы) процесса, выполняющего скрипт. |
$) |
Содержит эффективный GID процесса, выполняющего сценарий. |
$^D$ОТЛАДКА |
Содержит текущее значение флагов отладки. |
$ ^ C |
Сохраняет текущее значение флага, когда используется ключ командной строки –c. |
$^Ф |
Максимальный дескриптор системного файла, значение по умолчанию, установлено равным 2. |
$^I$INPLACE_EDIT |
Содержит значение переключателя командной строки –i. |
$^М |
Специальный пул памяти можно использовать, когда сценарий Perl завершает работу из-за ошибки нехватки памяти. |
$^O$OSNAME |
OperaИнформация о системе сохраняется. «Linux» для систем Linux, «mswin32» для Windows систем. |
$^T$BASETIME |
Время выполнения скриптов в секундах. |
$^W$ВНИМАНИЕ |
Текущее значение ключа командной строки –w. Предупреждающий переключатель. |
$ ARGV |
Имя текущего файла, если используется <>. |
Специальные переменные массива:
Технология | Описание |
---|---|
@ИНК |
Содержит список путей, по которым можно просмотреть модули или сценарии библиотеки Perl во время выполнения текущего сценария. Этот @INC используется операторами use и require для поиска по этим путям библиотечных модулей. |
@АРГВ |
Сохраняет переданные аргументы командной строки. |
@_ |
Используется в подпрограммах при передаче параметров в подпрограммы. |
@F |
Это массив, в котором сохраняются входные строки при автоматическом разделении –a (используется переключатель командной строки). |
Специальные переменные хеширования:
Технология | Описание |
---|---|
% INC |
Имя файла будет ключом; значения будут путем к этим файлам. Используется делать, использовать и требовать. |
% ENV |
Системные переменные окружения. |
%СИГ |
Signalобработчик. |
Регулярное выражение Perl
Что такое регулярное выражение?
Регулярное выражение Perl достаточно эффективно сопоставляет шаблоны строк внутри оператора или группы операторов. Регулярные выражения в основном используются при синтаксическом анализе текста, сопоставлении с образцом и многом другом в зависимости от требований. У нас есть определенные операторы, которые специально используются при связывании шаблонов регулярных выражений =~ и !~. Это операторы проверки и присваивания.
Регулярные выражения OperaTORs
Регулярные выражения OperaТоры в Perl
- Perl Match — м//
- Заменитель Perl – s///
- Транслитерация Perl – tr///
Прежде чем идти дальше, нам нужно кое-что знать о регулярных выражениях; в синтаксисе Perl Regex есть определенные вещи, такие как метасимволы и подстановочные знаки.
Голец | Смысл |
---|---|
\ |
Специальное предложение или цитата |
* |
Соответствует 0 или более символам |
+ |
Соответствует 1 или более символам |
? |
Соответствует 0 или 1 символу |
| |
Может использоваться для сопоставления альтернативных шаблонов. |
() |
Используется для хранения сопоставленного шаблона. |
[] |
Набор символов можно передать. Специально используется для цифр и алфавитов. |
{} |
Используется для указания количества раз, когда может быть выполнено совпадение. |
^ |
Начало строки |
$ |
Конец строки |
\w |
Используется для соответствия одному символу или слову, которое может быть буквенно-цифровым, включая «_». |
\W |
Соответствует чему-либо, кроме буквенно-цифрового |
\s |
Используется для сопоставления пробелов |
\S |
Соответствует чему-либо, кроме пробелов |
\d |
Номера совпадений. Не десятичные значения и отрицательные значения |
\D |
Сопоставьте что угодно, кроме цифр. |
\t |
Соответствие пространству табуляции |
\n |
Соответствовать новой строке |
Выше приведен набор символов, которые можно использовать при сопоставлении с образцом.
Давайте посмотрим несколько примеров.
Рассмотрим ситуацию, когда пользователь вводит некоторый ввод во время выполнения скрипта, и мы хотим проверить, ввел ли пользователь какое-либо имя в качестве входных данных или нет. Нам нужно написать синтаксис регулярного выражения, чтобы извлечь ваше имя и напечатать его.
my $userinput="Guru99 Rocks"; if($userinput=~m/.*(Guru99).*/) { print "Found Pattern"; } else { print "unable to find the pattern"; }
Вывод:
Найден шаблон
Здесь мы записали регулярное выражение как /.*(Guru99).*/.* соответствует всем символам в строке. '.' в Perl совпадение по регулярному выражению относится к любому символу, включая пробел.
Давайте посмотрим, как именно мы можем построить регулярное выражение.
Рассмотрим пример строки из нескольких слов, цифр и специальных символов, например: «Привет всем, это мой номер: +91-99298373639»;
Регулярное выражение: /^\w+\s\w+\s\w+\s\w+\s\w+\s\w+\:\+\d+\-\d+/i
Пробел слова Пробел слова Пробел слова Пробел слова Пробел слова Пробел слова специальный символ: пробел специальный символ + цифры специальный символ – цифры.
Перл-матч OperaTORs
Операторы сопоставления используются для сопоставления строки внутри некоторого оператора или переменной.
my $var="Hello this is perl"; if($var=~m/perl/) { print "true"; } else { print "False"; }
Вывод:
правда
Этот небольшой код выведет «истину», поскольку сопоставление с шаблоном Perl идентифицирует строку в переменной. По сути, Perl ищет текст, указанный в //, по всей строке, даже если он находит в одном месте, он возвращает «истину». Шаблон может находиться в любом месте переменной. Мы можем попробовать заменить =~ на !~, чтобы увидеть разницу между этими двумя операторами.
Перл-замена Operaтор
Этот оператор можно использовать для поиска и замены любого символа нулевым или другим символом.
my $a="Hello how are you"; $a=~s/hello/cello/gi; print $a;
Вывод:
виолончель, как дела?
Примечание. На самом деле мы можем использовать любую строку, соответствующую шаблону, как мы это делали ранее в этом операторе подстановки. Здесь мы использовали «gi», g-глобально, i-игнорировать регистр.
Перл-перевод Operaтор
Это похоже на замену, но здесь не используются регулярные выражения Perl, вместо этого мы можем напрямую передать значение или слово, которое хотим заменить.
my $a="Hello how are you"; $a=~tr/hello/cello/; print $a;
Вывод:
Привет, корова, ты?
Perl-файловый ввод-вывод
Perl был разработан для эффективного управления файлами и операциями ввода-вывода. Основное преимущество Perl заключается в синтаксическом анализе и обработке файлов. Существует множество встроенных функций и операторов, используемых при обработке файлов в Perl.
По сути, файловые операции, выполняемые в Perl, выполняются с использованием FILEHANDLE. Мы должны определить этот FILEHANDLE во время открытия файла для чтения или записи.
В этом руководстве по сценариям Perl вы узнаете:
Perl Открыть файл
Мы можем открыть файл с помощью функции open(), доступной в Perl.
open(FILEHANDLE, "filename or complete path of the file");
Теперь мы открыли файл, теперь возникает вопрос. Это для чтения или письма?
Файл чтения Perl и файл записи Perl
В Perl есть определенные режимы, которые необходимо использовать для чтения, записи или добавления файла.
Read – open(my $fh,"<filename or complete path of the file"); Write – open(my $fh,">filename or complete path of the file"); Append – open(my $fh,">>filename or complete path of the file");
Несколько примеров чтения файла:
Предположим, у нас есть файл Perl с именем file.txt, в котором содержится несколько строк текста. Нам нужно открыть этот файл и распечатать его.
open(FH,"<file.txt"); while(<FH>) # Looping the file contents using the FH as a filehandle. { print "$_"; } close FH;
or
open(FH,"<file.txt"); my @content=<FH>; # specifying the input of the array is FH. foreach(@content) { print "$_"; } close FH;
Это приведет к печати содержимого файла на экране вывода.
Теперь мы напишем программу для создания и записи данных в файл perl.
open(FH,">test.txt"); my $var=<>; print FH $var; close FH;
Это запишет входные данные, предоставленные во время выполнения, и создаст файл test.txt, который будет содержать входные данные.
Вышеупомянутый способ всегда пытается создать файл с именем test.txt и записывает входные данные в файл; мы напишем то же самое, чтобы добавить файл.
open(FH,">>test.txt"); my $var=<>; print FH $var; close FH;
Режимы | Описание |
---|---|
< |
Читать |
+< |
Читает и пишет |
> |
Создает, записывает и усекает |
+> |
Чтение, запись, создание и усечение |
>> |
Записывает, добавляет и создает |
+>> |
Чтение, запись, добавление и создание |
Теперь нам нужно увидеть, как читать, записывать и добавлять файлы, на базовых примерах.
Мы увидим еще несколько примеров и других функций, которые помогут лучше понять файлы.
Перл Телль
Этот метод вернет текущую позицию FILEHANDLER в байтах, если указано, иначе он будет рассматривать последнюю строку как позицию.
open(FH, "test.pl"); while(<FH>) { $a=tell FH; print "$a"; }
Перл Поиск
Функция Seek аналогична системному вызову fseek. Этот метод используется для позиционирования указателя файла в определенном месте путем указания байтов, за которыми следует либо начало указателя файла, либо конец указателя файла.
seek FH, bytes, WHENCE;
WHENCE — это позиция указателя файла, с которой он начинается. Ноль установит его с начала файла.
Пример. Пусть в файле input.txt есть такие данные, как «Привет, это мой мир».
open FH, '+<','input.txt'; seek FH, 5, 0; # This will start reading data after 5 bytes. $/ = undef; $out = <FH>; print $out; close FH;
Вывод:
это мой мир
Отключение Perl
Unlink используется для удаления файла.
unlink("filename or complete file path");
Обработка каталогов:
Мы также можем обрабатывать каталоги, через которые мы можем обрабатывать несколько файлов.
давайте посмотрим, как открыть каталог. Мы можем использовать методы opendir и readdir.
opendir(DIR,"C:\\Program Files\\"); #DIR is the directory handler. while(readdir(DIR)) # loop through the output of readdir to print the directory contents. { print "$_\n"; } closedir(DIR); #used to close the directory handler.
or
opendir(DIR,"C:\\Program Files\\"); @content=readdir(DIR); foreach(@content) { print "$_\n"; } closedir(DIR);
Это распечатает все доступные файлы в этом каталоге.
Тесты файлов Perl и их значение
-r |
Чтобы проверить, доступен ли файл/каталог для чтения текущим пользователем/группой. |
-w |
Чтобы проверить, доступен ли файл/каталог для записи текущему пользователю/группе |
-x |
Чтобы проверить, является ли файл/каталог исполняемым для текущего пользователя/группы |
-o |
Чтобы проверить, принадлежит ли файл/каталог текущему пользователю |
-R |
Чтобы проверить, доступен ли файл/каталог для чтения этому реальному пользователю/группе. |
-W |
Чтобы проверить, доступен ли для записи файл/каталог этому реальному пользователю/группе. |
-X |
Чтобы проверить, является ли файл/каталог исполняемым для этого реального пользователя/группы. |
-O |
Чтобы проверить, принадлежит ли файл/каталог этому реальному пользователю |
-e |
Чтобы проверить, существует ли имя файла/каталога |
-z |
Чтобы проверить, существует ли файл и имеет ли нулевой размер (всегда ложно для каталогов) |
-f |
Чтобы проверить, является ли запись обычным файлом |
-d |
Чтобы проверить, является ли запись каталогом |
-l |
Чтобы проверить, является ли Entry символической ссылкой |
-S |
Чтобы проверить, является ли Entry сокетом |
-p |
Чтобы проверить, является ли Entry именованным каналом («FIFO») |
-b |
Чтобы проверить, является ли Entry специальным файлом блока (например, монтируемым диском) |
-c |
Чтобы проверить, является ли Entry специальным символьным файлом (например, устройством ввода-вывода) |
-u |
Чтобы проверить, установлен ли файл или каталог setuid |
-g |
Чтобы проверить, установлен ли файл или каталог, setgid |
-k |
Чтобы проверить, установлен ли в файле или каталоге бит липкости |
-t |
Данный дескриптор файла является TTY (поскольку в соответствии с системной функцией isatty() имена файлов не могут быть проверены с помощью этого теста) |
-T |
Чтобы проверить, выглядит ли файл как «текстовый» файл |
-B |
Чтобы проверить, выглядит ли файл как «двоичный» файл |
-M |
Чтобы проверить возраст модификации файла (измеряется в днях) |
-A |
Чтобы проверить возраст доступа (измеряется в днях) к файлу |
-C |
Чтобы проверить возраст модификации Inode (измеряется в днях) файла |
Perl-подпрограмма
Что такое подпрограмма?
подпрограммы аналогичны функциям в других языках программирования. Мы уже использовали некоторые встроенные функции, такие как print, chomp,chop и т. д. Мы можем написать свои собственные подпрограммы на Perl. Эти подпрограммы можно написать в любом месте программы; предпочтительнее размещать подпрограммы либо в начале, либо в конце кода.
Пример подпрограммы
sub subroutine_name { Statements…; # this is how typical subroutines look like. }
Теперь, когда мы знаем, как написать подпрограмму, как нам получить к ней доступ?
Нам нужно получить доступ к подпрограмме или вызвать ее, используя имя подпрограммы с префиксом символа «&».
sub display { print "this is a subroutine"; } display(); # This is how we call a subroutine
Передача параметров Perl и аргументов Perl
Подпрограммы или функции Perl пишутся для размещения в них повторно используемого кода. Большая часть многократно используемого кода требует передачи параметров в подпрограмму. Здесь мы узнаем, как передавать аргументы подпрограмме.
sub display { my $var=@_; # @_ is a special variable which stores the list of arguments passed. print "$var is the value passed"; } display(2,3,4); #this is how we need to pass the arguments.
Вывод:
3 — переданное значение
@_ — это специальная переменная массива, в которой хранятся аргументы, передаваемые подпрограммам.
Perl Shift
Мы также можем использовать ключевое слово «shift», которое сдвигает один параметр за раз в переменную или $_[0],$_[1]… которая является отдельным элементом массива @_.
sub display { my $var=shift; print "$var is passed"; } display("hello");
Вывод:
привет пройдено
Подпрограммы обычно используются в объектно-ориентированном программировании, а также в тех местах, где может быть размещено больше повторно используемого кода.
Основная функциональность подпрограмм — выполнить некоторую задачу и вернуть результат повторно используемого кода.
Мы можем вернуть значение из подпрограммы, используя ключевое слово return.
sub add { my $a=shift; my $b=shift; return($a+$b); } my $result=add(5,6); print $result;
Вывод:
11
В $result будет храниться значение добавленных $a и $b.
Мы также можем передавать хэши и массив непосредственно в подпрограмму.
sub hash { my %hash=@_; print %hash; } %value= ( 1=>'a', 2=>'b'); &hash(%value);
Вывод:
1a2b
Мы также можем вернуть хеш или массив.
sub hashArray { my %hash=@_; print "Inside Sub-routine"; print %hash; return(%hash); } %hash=(1=>'a', 2=>'b'); my(@ret)=hashArray(%hash); print "After Sub-routine call"; print @ret;
Вывод:
Внутри подпрограммы2b1aПосле вызова подпрограммы2b1a
Perl-формат
В Perl есть механизм, с помощью которого мы можем генерировать отчеты. Используя эту функцию, мы можем создавать отчеты именно так, как мы хотим, при печати на экране «Вывод» или в файле. Простой формат можно написать с использованием функций printf или sprintf, доступных в Perl.
printf "%05d\n", 30;
Это будет включать ведущие нули перед номером 30, что приведет к общему количеству цифр до 5. То же самое можно использовать для sprintf.
sprintf "%05d\n", 30; # This will print the same as printf.
Используя printf и sprintf, мы можем получить большинство форматов Perl. В случае с отчетами это будет сложно реализовать.
================================================== =========================
Имя Адрес Возраст Телефон
================================================== =========================
Krishna Ченнаи 24 929309242
Шрути Ченнаи 24 929309232
Выше приведен пример отчетов, которые нам нужно распечатать таким же образом в Perl. Этого можно добиться с помощью perl printf и perl sprintf. Его можно эффективно реализовать с помощью формата.
Формат может быть объявлен следующим образом.
format FORMATNAME=FORMATLIST.
Здесь мы будем использовать особый метод write для печати данных на экране вывода или в файл.
Символ | Описание |
---|---|
@ |
Используется для обозначения начала держателя поля. |
> |
Правильное выравнивание текста |
< |
Выравнивание текста по левому краю |
| |
Выравнивание по центру |
# |
Числовое, если указано несколько #. Предполагается как комментарий, если указан один # |
. |
Десятичная точка |
^ |
Держатель поля начала также можно использовать для многострочного текста, а также для переноса слов. |
~ |
Строка должна быть пустой, если переменная пуста |
@* |
Несколько строк. |
($name,$addr,$age,$phone)=("krishna","chennai","24","929309242"); write; ($name,$addr,$age,$phone)=("shruthi","chennai","24","929309232"); write; format STDOUT_TOP= =============================================================== NAME ADDRESS AGE PHONE =============================================================== . format STDOUT= @<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<< $name, $addr, $age, $phone .
Выполните код, чтобы увидеть результат.
Мы используем символ @ для указания начала держателя поля или строки, '<' каждого символа.
Мы используем STDOUT для печати на стандартном выходе. Мы можем изменить это на обработчик файла, который мы используем для записи данных в файл.
open(REPORT,">test.txt"); ($name,$addr,$age,$phone)=("krishna","chennai","24","929309232"); write REPORT; ($name,$addr,$age,$phone)=("shruthi","chennai","24","929309232"); write REPORT; format REPORT_TOP= =============================================================== NAME ADDRESS AGE PHONE =============================================================== . format REPORT= @<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<< @<<< @<<<<<<<<<< $name, $addr, $age, $phone
Мы можем заменить '<' на '>' или '|' чтобы изменить выравнивание текста. STDOUT_TOP используется для создания заголовка формата. Мы также можем использовать то же самое с обработчиком файлов, используя FH_TOP (FH — обработчик файла). Это выведет формат в файл, над которым мы работаем. на.
Стандарты кодирования Perl
У каждого программиста будет свой собственный подход к написанию кода с использованием определенных стандартов; эти стандарты должны быть достаточно знакомы, чтобы другой программист мог правильно понять и поддерживать код.
Стандарты кодирования в Perl
Писать код просто и легко. Проблема возникает, когда ее необходимо поддерживать на более поздних этапах. При написании кода необходимо соблюдать соответствующие рекомендации и стандарты кодирования. Perl также определяет определенные стандарты, которые будут полезны программистам при написании кода. Во время написания кода желательно загружать «строгое» и «модуль предупреждений». Каждый из этих модулей имеет свое значение. Strict заставит нас объявить переменную перед использованием, а также сообщит, присутствует ли в вашем коде какое-либо пустое слово. В качестве альтернативы можно использовать модуль предупреждений, передав опцию «-w» интерпретатору Perl в shebang. Предупреждения будут печататься на экране вывода.
#!/usr/bin/perl –w
Ниже приведены несколько списков стандартов.
- Используйте модуль «строго» и «предупреждения».
- Удалить переменную, которая не используется.
- Имена переменных должны быть понятны другим пользователям. Пример: $name, @fileData и т. д.
- При написании скрипта требуется документация.
- Не кодируйте какие-либо значения жестко, а попытайтесь получить их динамически или попросить пользователя ввести их во время выполнения. (Путь к файлу, имена файлов).
- Максимизируйте повторное использование кода. Попробуйте поместить многоразовый код в подпрограммы.
- Это значит, что подпрограммам следует давать полные имена.
- Подпрограммы необходимо писать с соответствующими комментариями и документацией.
- Всегда инициализируйте переменные.
- Всегда проверяйте коды возврата для системных вызовов. Открытие файла может произойти, а может и не произойти, наличие здесь кода возврата отобразит статус ошибки, если файл не существует.
Пример: открыть(FH,
- Подпрограмма всегда должна возвращать значение.
- Откройте фигурную фигуру в той же строке.
- Однострочный БЛОК может располагаться в одну строку с фигурными.
- Используйте метки во время LOOPS, чтобы можно было легко выйти из цикла, когда это необходимо.
- Используйте подчеркивание, когда длинные фразы слов записываются как имя переменной или подпрограммы.
- Попробуйте использовать простое регулярное выражение при кодировании.
Идеальный пример со стандартами кодирования:
####################################################################### Program to read the file content # Date: 22-2-2013 # Author : Guru99 ######################################################################## #!/usr/bin/perl use strict; use warnings; my $line; open FR, "file.txt" || die("Cannot open the file $!"); while ($line=<FR>) { print $line; } # Looping file handler to print data
Обработка ошибок Perl
Что такое исключение?
Исключением является событие, возникающее во время выполнения программы, которое приостанавливает или завершает вашу программу.
Обработка ошибок
Обработка ошибок — это то, о чем каждый программист должен заботиться во время программирования. Perl также предоставляет методы обработки ошибок, с помощью которых мы можем перехватывать ошибки и обрабатывать их соответствующим образом.
Обработка ошибок в Perl
Существует множество способов проверить наличие ошибок в программе. Нам нужно изучить коды возврата функции, код которой мы используем. Если мы сможем правильно обрабатывать эти коды возврата, то большая часть обработки ошибок может быть достигнута.
Что вернется в случае системных вызовов?
В случае системных вызовов статус возврата будет сохранен в двух специальных переменных $? И $!
$! – При этом будет обнаружен номер ошибки или номер ошибки, связанный с сообщением об ошибке.
$? – Это будет содержать функцию возврата статуса system().
Использование оператора Perl или логического
Мы можем использовать логический оператор или для обработки ошибок при использовании системных вызовов.
например:
open(FH,"<test.txt");
Это откроет файл в режиме чтения, если файл существует.
Что делать, если файл отсутствует?
open(FH,"<test.txt") or die("File not exists $!"); # This will perl exit the program if the file not exists. open(FH,"<test.txt") or warn ("File not exists $!"); # This will print a warning message on STDERR
Перл Эвал
Функция Eval может обрабатывать фатальные ошибки, ошибки времени компиляции, ошибки времени выполнения и те ошибки, которые приводят к завершению вашего кода в какой-то момент времени.
Функция Perl Eval может иметь блок кода или выражение. Evals считает все, что в нем находится, строкой.
Рассмотрим ситуацию вызова подпрограммы, которая не определена в скрипте. В этой ситуации сценарий завершается с сообщением «неопределенная подпрограмма &XYZ, эту ошибку можно обработать в функции eval.
Существует множество вариантов использования блока evals; одно из таких применений — когда мы хотим загрузить модуль, специфичный для операционной системы, во время выполнения.
Пример: деление на ноль приводит к фатальной ошибке; чтобы справиться с этим, мы можем поместить код в блок evals.
$a=5; $b=0; eval { '$result=$a/$b'; } if($@) { print "$@"; # All the error codes returned by evals will get stored in $@. }
Вывод:
синтаксическая ошибка в строке 8 C:\Users\XYZ\Text.pl, рядом с «)
{“
Выполнение C:\Users\XYZ\Text.pl прервано из-за ошибок компиляции.
Пример: оценка с использованием оператора die на Perl.
sub test { die "Dieing in sub test \n"; } eval { test(); }; print "Caught : $@\n";
Вывод:
Пойман: Смерть во время дополнительного теста.
Использование Perl Попробуйте
Perl не поддерживает блоки кода try, catch иfinal, как другие языки программирования. Мы по-прежнему можем использовать их, загрузив внешний модуль Perl.
используйте Try::Tiny;
Используя это, мы можем поместить ваш код в блок try и отловить ошибку в блоке предупреждения.
Вместо $@, используемого в eval, Try::Tiny использует $_.
# обработка ошибок с помощью обработчика catch
try { die "Die now"; } catch { warn "caught error: $_"; # not $@ };
Использование наконец.
my $y; try { die 'foo' } finally { $y = 'bar' }; try { die 'Die now' } catch { warn "Returned from die: $_" } finally { $y = 'gone' };
Вывод:
foo в C:\Users\XYZ\Text.pl, строка 4.
Мы можем использовать try, catch и, наконец, таким образом.
попробуйте { # оператор }
поймать {# оператор }
наконец { # оператор };
Or
try { # statement } finally { # statement };
Вывод:
Or
try { # statement } finally { # statement } catch { # statement };
Вывод:
Программирование сокетов на Perl
Что такое розетка?
Сокет — это среда, посредством которой два компьютера могут взаимодействовать в сети, используя сетевой адрес и порты.
Предположим, A (Сервер) и B (Клиент) — две системы, которым приходится взаимодействовать друг с другом с помощью сокетов для запуска некоторых программ.
Чтобы реализовать это, нам нужно создать сокеты как в A (сервере), так и в B (клиенте), A будет в состоянии приема, а B — в состоянии отправки.
А (Сервер):
Здесь сервер желает получить соединение от B (клиента), выполнить некоторые задачи и отправить результат обратно B (клиенту). Когда мы выполняем код, операционная система в A пытается создать сокет и привязывает к этому сокету один порт. Затем он будет слушать отправителя, которым является B.
Б (Клиент).
Здесь клиент желает отправить некоторую программу из своей системы на А (сервер) для некоторой обработки. Когда мы выполняем код, операционная система в B пытается создать сокет для связи с A (сервером), B должен указать IP-адрес и номер порта A, к которому B желает подключиться.
Если все пойдет хорошо, обе системы будут взаимодействовать для обмена информацией через один порт. Perl также поддерживает программирование сокетов.
Perl имеет собственный API, с помощью которого можно реализовать сокеты. Чтобы упростить задачу, существует множество модулей CPAN, с помощью которых мы пишем программы сокетов.
Операции сервера:
- Создать сокет
- Привязать сокет к адресу и порту
- Прослушайте сокет по этому адресу порта
- Примите клиентские подключения, которые пытаются подключиться, используя порт и IP-адрес сервера.
- Выполнять операции
Клиент OperaЦИИ:
- Создать сокет
- Подключитесь к серверу, используя адрес его порта.
- Выполнять операции
socket.io
Это один из модулей программирования сокетов, основанный на объектно-ориентированном программировании. Этот модуль не поддерживает тип сети INET, используемый в сетях.
IO::Socket::INET:
Этот модуль поддерживает домен INET и основан на IO::Sockets. Все методы, доступные в IO::Sockets, наследуются в модуле INET.
Клиент и сервер с использованием протокола TCP:
TCP — протокол, ориентированный на соединение; мы будем использовать этот протокол для программирования сокетов.
Прежде чем продолжить, давайте посмотрим, как мы можем создать объект для модуля IO::Socket::INET и создать сокет.
$socket = IO::Socket::INET->new(PeerPort => 45787, PeerAddr => inet_ntoa(INADDR_BROADCAST), Proto => udp,LocalAddr => 'localhost',Broadcast => 1 ) or die "Can't create socket and bind it : $@n";
Новый метод в модуле IO::Socket::INET принимает хеш в качестве входного параметра подпрограммы. Этот хэш предопределен, и нам просто нужно указать значения ключей, которые мы хотим использовать. Существует список ключей, используемых этим хешем.
Адрес узла |
Адрес удаленного хоста |
Одноранговый хост |
Синоним PeerAddr |
ПирПорт |
Удаленный порт или служба |
ЛокальныйАддр |
Адрес привязки локального хоста |
Localhost |
Синоним для LocalAddr |
локальный порт |
Порт привязки локального хоста |
Прото |
Имя протокола (или номер) |
Тип |
Тип сокета |
Слушать |
Размер очереди на прослушивание |
Адрес повторного использования |
Установите SO_REUSEADDR перед привязкой. |
Снова использовать |
Установите SO_REUSEADDR перед привязкой. |
Порт повторного использования |
Установите SO_REUSEPORT перед привязкой. |
Трансляции |
Установите SO_BROADCAST перед привязкой |
Истек |
Значение таймаута для различных операций |
Мультидомед |
Попробуйте все адреса для многодомных хостов. |
блокирование |
Определите, будет ли соединение находиться в режиме блокировки |
Сервер.pl
use IO::Socket; use strict; use warnings; my $socket = new IO::Socket::INET ( LocalHost => 'localhost', LocalPort => '45655', Proto => 'tcp', Listen => 1, Reuse => 1, ); die "Could not create socket: $!n" unless $socket; print "Waiting for the client to send datan"; my $new_socket = $socket->accept(); while(<$new_socket>) { print $_; } close($socket);
Клиент.pl
use strict; use warnings; use IO::Socket; my $socket = new IO::Socket::INET ( PeerAddr => 'localhost', PeerPort => '45655', Proto => 'tcp', ); die "Could not create socket: $!n" unless $socket; print $socket "Hello this is socket connection!n"; close($socket);
Примечание:
При программировании сокетов нам придется сначала выполнить Server.pl, а затем client.pl индивидуально в разных командных строках, если мы работаем на локальном хосте.
Что такое модули и пакеты Perl
Модули и пакеты тесно связаны друг с другом и независимы. Пакет: пакет Perl также известен как пространство имен, в котором используются все уникальные переменные, такие как хеши, массивы, скаляры и подпрограммы. Модуль: Модуль — это набор многократно используемого кода, в котором мы пишем подпрограммы. Эти модули можно загружать в программы Perl, чтобы использовать подпрограммы, написанные в этих модулях.
Что такое модули Perl?
Стандартные модули будут установлены во время установки Perl в любой системе. CPAN: комплексный Perl Archive Network — глобальный репозиторий модулей Perl. Наши собственные модули Perl, которые мы можем написать. По сути, модуль при загрузке в любой скрипт экспортирует все свои глобальные переменные и подпрограммы. Эти подпрограммы можно вызывать напрямую, как если бы они были объявлены в самом скрипте. Модули Perl могут быть написаны с расширением .pm к имени файла. Пример: Foo.pm. Модуль можно написать, используя «package Foo» в начале программы.
Базовый модуль Perl:
#!/usr/bin/perl package Arithmetic; sub add { my $a=$_[0]; my $b=$_[1]; return ($a+$b); } sub subtract { my $a=$_[0]; my $b=$_[1]; return ($a-$b); } 1;
Нет выхода
Чтобы использовать этот модуль Perl, нам нужно поместить его в текущий рабочий каталог.
Мы можем загрузить модуль Perl, используя require или использовать в любом месте кода. Основное различие между требованием и использованием заключается в том, что требуется загружать модуль во время выполнения и использовать загрузки во время компиляции.
#!/usr/bin/perl require Arithmetic; print Arithmetic::add(5,6); print Arithmetic:: subtract (5,6);
Здесь, в приведенном выше примере, мы получаем доступ к подпрограммам, используя полное имя модуля.
Мы также можем получить доступ к пакету, используя «использовать арифметику».
Экспортер:
Этот модуль имеет стандартную функциональность импорта методов.
#!/usr/bin/perl package Arithmetic; require Exporter; @ISA= qw(Exporter); # This is basically for implementing inheritance. @EXPORT = qw(add); @EXPORT_OK = qw(subtract); sub add { my $a=$_[0]; my $b=$_[1]; return ($a+$b); } sub subtract { my $a=$_[0]; my $b=$_[1]; return ($a-$b); } 1;
Массив @EXPORT можно использовать для передачи списка переменных и подпрограмм, которые по умолчанию будут экспортированы вызывающей стороне модуля.
Массив @EXPORT_OK можно использовать для передачи списка переменных и подпрограмм, которые будут экспортироваться по требованию, которые пользователь должен указать при загрузке модуля.
#!/usr/bin/perl use Arithmetic qw(subtract); print add(5,6); print subtract (5,6);
По умолчанию добавленная подпрограмма будет экспортирована. Метод Subtract не будет экспортирован, если он не указан при загрузке модуля.
Объектно-ориентированное программирование на Perl
В этом разделе мы научимся создавать объектно-ориентированные модули Perl. Для начала давайте разберемся, что же это за объект? Объект — это экземпляр, с помощью которого мы можем получить доступ, изменить и найти некоторые данные в любом модуле Perl. Это не что иное, как заставить ваш существующий пакет Perl, переменные и подпрограммы действовать как классы, объекты и методы по отношению к другим языкам программирования.
Создать класс
Мы уже знаем, как создавать модули из предыдущей темы. Цель класса — хранить методы и переменные. Модуль Perl будет иметь подпрограммы, которые являются методами. Нам нужен доступ к этим объектам переменных и подпрограмм.
Перл-конструктор
Конструктор в Perl — это метод, который выполняет и возвращает нам ссылку с именем модуля, отмеченным в ссылке. Это называется благословением класса. Мы используем особую переменную для благословения класса Perl, то есть bless.
#!/usr/bin/perl package Arithmetic; sub new { my $class=shift; my $self={}; bless $self, $class; return $self; } sub add { my $self= shift; my $a=$_[0]; my $b=$_[1]; return ($a+$b); } sub subtract { my $self= shift; my $a=$_[0]; my $b=$_[1]; return ($a-$b); } 1;
Новый метод, используемый в качестве конструктора класса. Этот конструктор создаст для нас объект и вернется к сценарию, вызывающему этот конструктор.
#!/usr/bin/perl use Arithmetic; my $obj= Arithmetic->new(); my $result= $obj->add(5,6); print "$result"; $result = $obj->subtract(6,5); print "$result";
Здесь нам нужно понять, как создается объект. Всякий раз, когда мы пытаемся создать объект для класса, нам нужно использовать полное имя класса. Предположим, что класс Perl находится в каком-то lib\Math\Arithmetic.pm. И если мы хотим получить доступ к этому классу Perl из каталога lib, мы должны предоставить полный путь к классу при вызове сценария.
используйте lib::Math::Arithmetic;
my $obj = lib::Math::Arithmetic->new();
Вот как происходит создание объекта в Perl.
@ИНК:
Как сценарий Perl узнает, где находится библиотечный модуль? Perl знает только текущий каталог сценария и путь к встроенной библиотеке Perl. Всякий раз, когда мы используем модуль Perl, который не находится в текущем каталоге или пути к библиотеке Perl, сценарий всегда будет завершаться сбоем. Что касается @INC, то это массив, содержащий все пути к каталогам, в которых необходимо искать модули Perl. Попробуйте выполнить эту команду и посмотрите, какой будет результат.
perl –e "print @INC"
Это даст некоторый результат, и это путь, по которому будут доступны модули lib. Всякий раз, когда мы используем какой-либо новый библиотечный модуль, нам нужно указать интерпретатору Perl, чтобы он заглянул в то конкретное место, где доступен модуль Perl.
push(@INC, "PATH TO YOUR MODULE");
Сделайте это своей первой строкой кода. Это заставит вашего переводчика изучить этот Путь. или использование
lib Arithmetic; # List here is your Perl Module location
Перл-деструктор
Деструктор объекта по умолчанию вызывается в конце и перед завершением работы скрипта. Это используется для уничтожения ваших объектов из памяти.
Сценарии оболочки PERL V/s
- Программирование на Perl не вызывает проблем с переносимостью, что часто случается при использовании разных оболочек в сценариях оболочки.
- Обработка ошибок в Perl очень проста.
- Вы можете легко писать длинные и сложные программы на Perl из-за его обширности. Это контрастирует с Shell, который не поддерживает пространства имен, модули, объекты, наследование и т. д.
- В Shell меньше доступных библиотек многократного использования. Ничего по сравнению с CPAN Perl
- Shell менее безопасен. Он вызывает внешние функции (такие команды, как mv, cp и т. д., зависят от используемой оболочки). Напротив, Perl выполняет полезную работу, используя внутренние функции.
Как PERL используется в автоматизированном тестировании
Perl широко используется в автоматизации. Возможно, это не лучший язык программирования в мире, но он лучше всего подходит для определенных типов задач. Давайте обсудим, где и почему используется Perl. Автоматизация тестирования.
Тестирование хранилища
Что такое хранилище? Данные хранятся в файлах.
Предположим, у нас есть хранилище, связанное с хранилищем. Тестовый кейс где нам нужно записать данные в один раздел, прочитать их и проверить правильность записи данных.
Это можно сделать вручную, но сможет ли ручной тестер выполнить то же самое 10000 раз? Это будет кошмар! Нам нужна автоматизация
Лучшим инструментом для автоматизации всего, что связано с хранением, является Perl из-за его методов обработки файлов, РЕГЭКС и мощный анализ файлов, который требует наименьшего времени выполнения по сравнению с другими языками программирования.
Зачем нам нужно тестировать хранилище? Подумайте о больших центрах обработки данных, где данные будут непрерывно передаваться из одной системы в другую, и в секунду будут храниться тысячи записей. Тестирование надежности такого механизма хранения имеет важное значение.
Многие компании, такие как HP, Dell, IBM и многие производители серверов используют Perl в качестве интерфейса для тестирования функциональности в областях хранения и сети. NetApp — одна из таких компаний, которая полностью работает над хранилищем и использует Perl в качестве языка программирования для автоматизации тестовых случаев.
Если вас интересует автоматизация Perl, то было бы целесообразно узнать о хранилищах и сетях. Concepts.
Тестирование сервера и сети:
Тестирование сервера и сети с использованием Perl
PERL широко используется для мониторинга работоспособности серверов и мониторинга производительности.
Рассмотрим центр обработки данных, в котором имеется 100 хостов (серверов). Вам необходимо подключиться к каждому хосту, выполнить некоторые команды удаленно. Вы также хотите перезагрузить систему и проверить, когда она снова появится в сети.
Выполнение этой задачи вручную для всех 100 хостов будет кошмаром. Но мы можем легко автоматизировать это с помощью PERL.
Разработайте шаги для достижения вышеуказанной автоматизации с использованием PERL.
- Возьмите из файла информацию о хосте, например (IP, имя пользователя и пароль).
- Используйте Net::SSH2 для подключения к каждой системе и создания канала для выполнения команд.
- Выполните набор необходимых команд, например: ls, dir, ifconfig,ps и т. д.
- Перезагрузка системы.
- Подождите 10 минут, пока система запустится.
- Пропингуйте систему с помощью модуля Net::Ping и распечатайте статус.
Мы закодируем приведенный выше сценарий.
Давайте возьмем файл с именем Input.txt, в котором будет храниться полная информация обо всех хостах, к которым нам нужно подключиться и выполнить команду.
Ввод.txt
192.168.1.2 пароль root
192.168.1.3 пароль root
192.168.1.4 корень root123
HostCheck.pl
use Net::SSH2; use Net::Ping; use strict; use warnings; my $ping = Net::Ping->new(); # Creating object for Net::Ping my $SSHObj = Net::SSH2->new(); #Creating object for Net::SSH2 open( FH, "Input.txt" ); # Opening file and placing content to FH my @hosts = <FH>; my $ip; my @ips; foreach (@hosts) { if ( $_ =~ /(.*)\s+(\w+)\s+(.*)/ ) #Regex to get each info from file { $ip = $1; my $user = $2; my $password = $3; $SSHObj->connect($ip); print "Connecting to host -- $ip --Uname:$user --Password:$password\n"; my $status = $SSHObj->auth_password( $user, $password ); print "$status\n"; die("unable to establish connection to -- $ip") unless ($status); my $shell = $SSHObj->channel(); print "$_\n" while <$shell>; $shell->blocking(1); $shell->pty('tty'); $shell->shell(); sleep(5); #Executing the list of command on particular host. Can be any command print $shell "ls \n"; print "$_\n" while <$shell>; print $shell "ps \n"; print "$_\n" while <$shell>; print $shell "dir \n"; print "$_\n" while <$shell>; print $shell "init 6\n"; #rebooting the system push( @ips, $ip ); } } sleep 600; foreach (@ips) { if ( $ping->ping($_) ) { print "$_ is alive.\n" if $ping->ping($_); } else { print "$_ is not still up --waiting for it to come up\n"; } }
Веб-тестирование
Perl не ограничивается только тестированием хранилищ и сетей. Мы также можем выполнить веб-тестирование с использованием PERL. WWW-механизировать используется один модуль для веб-тестирование. По сути, он не запускает браузер для проверки функциональности веб-приложений, а использует исходный код html-страниц.
Мы также можем выполнить тестирование на основе браузера, используя Selenium IDE, RC, веб-драйвер. Perl поддерживается для Selenium.
\н»; #это сохранит оставшуюся строку после завершения сопоставления с образцом.
Распечатать "