Учебные материалы по математике | Ввод из операции "ромб" | Matematiku5
Вузы по математике Готовые работы по математике Как писать работы по математике Примеры решения задач по математике Решить задачу по математике online

Ввод из операции "ромб"


{ chomp; # Это эквивалентно chomp ($_)

#обработка $_

}

Если не указана переменная, то работает встроенная $_

Ввод из операции "ромб"

Это другой способ чтения входной информации. Это аналогично <STDIN>, отличие в том, что данные получают из файла/файлов, заданных в командной строке при вызове Perl-программы.

Пусть есть программа my_progr:

#! /usr/local/bin/perl

while (<>)

{ print $_

}

Вызов программы:

my_progr file1 file2 file3

Операция "ромб" читает сначала все строки из первого файла, затем из второго так далее. Значение undef возвращается только тогда, когда прочитаны все три файла.

Если имена файлов в командной строке не указаны, то операция <> автоматически читает данные со стандартного ввода.

Операция "ромб" не работает с аргументами командной строки непосредственно, а работает с массивом @ARGV. Любой аргумент заносится как элемент в этот массив. Поэтому можно заставить работать операцию "ромб" не с аргументами командной строки, а с новым списком. Например,

@ARGV=("aa","bb","cc");

while (<>)

{ print ("This is line $_");

}

Здесь обрабатываются строки из файлов "aa", "bb" и "cc".

Вывод в STDOUT

Две функции

—  print

—  printf

А. print – обычный вывод. Получает список строк и посылает их по очереди на стандартный вывод, не добавляя каких-либо промежуточных или конечных символов. Возвращаемое значение print – "истина" или "ложь". Работает как со скобками, так и без них.

Пример:

print ((2+3),"hello"); => 5hello

print 2+3,"hello"; => 5hello

print (2+3),"hello"; => 5 — после скобок аргументы игнорируются

Б. printf – форматированный вывод

Аналогично языку Си. Первый аргумент – строка управления форматом, указывающим, как выводить остальные аргументы

Пример:

printf "%15s %5d %10.2f n",$s,#n,$r;

Здесь:$s=> в 15-символьном поле,

$n=> как десятичное целое в 5-символьном поле

$r=> как ПЗ с 2мя знаками после запятой в 10символьном поле

n=> символ новой строки

Регулярные выражения (РВ)

Регулярное выражение представляет собой образец – шаблон, который сопоставляется со строкой. Начало было положено в UNIX при работе с

—  shell;

—  grep;

—  awk;

—  редакторами UNIX;

Появились в JawaScript 1.2.

В Perl регулярное выражение – очень мощный инструмент для поиска и замены. Например в grep для поиска строк, в которых есть подстрока abc, можно использовать:

grep abc *.file >rtesult

Здесь abc – регулярное выражение

В Perl регулярные выражения (РВ) записываются так:

/abc/

т. е. между слешами.

if (/abc/)

{print $_}

Здесь РВ abc сверяется с переменной $_. Если в ней найдено abc, то операция сопоставления возвращает "истина", иначе – "ложь".

Данный фрагмент Perl-программы просматривает только одну строку, в отличие от grep, которая оперирует со всеми строками. Чтобы обработать все строки, надо добавить цикл:

while (<>)

{ if (/abc/)

{print $_;}

}

Здесь обрабатываются все строки файлов, заданных при вызове командной строки.

  Образцы с одним символом

1.  Одиночный символ, соответствующий самому себе.

/a/ — только а в строке

2.  Точка

Это любой одиночный символ, кроме символа новой строки — n

/a./ — любая 2хсимвольная последовательность, начинающаяся с буквы а кроме an.

3.  Класс символов

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

Например:

/[12abc]/ => 1|2|a|b|c. Это означает либо "1", либо "2", либо "а" и так далее.

Для указания диапазона символов можно ставить знак дефис (-)

/a-z/ => любая прописная буква.

Для включения в образец квадратных скобок или дефиса, надо перед ними или поставить обратный слеш

/[0-9]/ => любая цифра

/[0-9-]/ => все цифры или дефис

/[a-z A-z 0-9]/ => любая буква или цифра

или:

—  дефис можно поставить в конец строки класса РВ;

—  левую квадратную скобку можно поставить в конец строки класса РВ;

—  правую квадратную скобку можно поставить в начало строки класса РВ.

4.  Отрицание символов

Это знак ^, который ставится сразу за левой скобкой.

[^0-9] => любой нецифровой символ. Такому классу симвлолв соответствует любой символ, отсутствующий в этом списке.

[^^] => любой символ, кроме символа ^

5.  Предопределенные классы символов

Некоторые распространенные классы символов определены заранее:

Конструкция

Эквивалентный класс

Обозначение

d

[0-9]

Цифра

D

[^0-9]

Не цифра

w

[a-zA-z0-9]

Обычный символ

W

[^a-zA-Z0-9]

Специальные символы

s

[ rfnt]

Пробельный символ

S

[^ rfnt]

Непробельный символ

Пример:

da-fA-F – одна шестнадцатеричная цифра.

Класс w можно использовать при построении имени.

К пробельным символам относятся:

—  пробел;

—  r – возврат каретки;

—  n – новая строка;

—  t – табуляция;

—  f – новая страница.

Вариант с прописными буквами DWS соответствует отрицанию (дополнению) этих классов до множества из 256 символов.

Образцы из группы символов

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

1.  Последовательность

Самый простой образец =>

/abc/ => чтобы в строке была подстрока abc

2.  Множители

А. Звездочка — *

Обозначает ни одного или более экземпляров, стоящего перед ней символа (или класса символов.

Б. Плюс — +

Обозначает один или более экземпляров стоящего перед ним символа.

Пример:

/f0+ba*r/

В результате имеем:

f=> один или более 0 => b=> ни одного или много a => r

В. Вопросительный знак -?

Обозначает ни одного или один экземпляр стоящего перед ним символа.

Внимание!

Все эти множители обладают "прожорливостью" или "жадностью". Т. е. если ему будет соответствовать 5-10 символов, то в любой раз он будет выбирать 10-символьную строку.

Например:

$_="fred xxxxxxxxxx lorry";

/x+/ соответствует всему набору " xxxxxxxxxx ", а не xx или xxx.

Для выбора 5-10 символов можно сделать так:

xxxxxx? x?x? x?x?

Это неудобно, поэтому применяют следующие образцы.

3.  Общий множитель

Это одно или два числа, заключенные в фигурные скобки

/x{5,10}/ => символ x от 5 до 10 раз

/x{5,}/ => символ x 5 и более раз

/x{5}/ => символ x строго 5 раз

/x{0,5}/ => символ x 5 и менее раз

Пример:

/a.{5}b/ => a, затем любые 5 символов, кроме n, и b. Причем, эти 5 символов не обязательно должны быть одинаковыми.

Внимание! Эквивалентные конструкции:

Множитель Эквивалент

* {0,}

+ {1,}

? {0,1}

Внимание!

Если в одном РВ два множителя, то "правила прожорливости" дополняются правилом "чем левее, тем прожорливее"

Пример:

$_="a xxx c xxxx c xxx d"

/a.*c.*/ соответствует a xxx c xxxx c, а не xxx c

4.  Модификатор — ?

Применяется для того, чтобы любой множитель перестал быть прожорливым, то есть стал "ленивым".

Для предыдущего примера:

/a.*?C.*d/

Часть образца

.*?с

теперь соответствует минимальному числу символов между а и с, а не максимальному. То есть с образцом совпадает часть строки до первой буквы s, а не до второй.

Данный модификатор можно ставить после любого множителя:

-, ?, +, *, {m, n}.

Пример:

$_="a xxx ce xxxx ci xx cd"

/a.*ce.*d/

Вначале.*c даст

"a xxx ce xxxx ci xx cd",

но так как после "с" не символ е, то происходит откат до

"a xxx ce xxxx ci", а потом откат до "a xxx ce".

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

Наташа

Автор

Наташа — контент-маркетолог и блогер, но все это не мешает ей оставаться адекватным человеком. Верит во все цвета радуги и не верит в теорию всемирного заговора. Увлекается «нефрохиромантией» и тайно мечтает воссоздать дома Александрийскую библиотеку.

Распродажа дипломных

 Скидка 30% по промокоду Diplom2020