Функции обработки ассоциативных массивов — КиберПедия 

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Функции обработки ассоциативных массивов

2022-12-30 16
Функции обработки ассоциативных массивов 0.00 из 5.00 0 оценок
Заказать работу

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

ФУНКЦИЯ KEYS

Функция keys возвращает значения ключей, которые отвечаютассоциативному массиву. Она имеет следующий формат:

@key_list = keys(%Array);

Функция keys возвращает массив ключей в виде регулярногосписка. Следующий фрагмент программы иллюстрирует использованиефункции keys:

$ages{'Bob'} = 25; $ages{'Mary'} = 30; $ages{'Zack'} = 15; @list = keys(%ages); # @list будет 'Zack', 'Bob', 'Mary' @list = sort keys %ages # @ list 'Bob', 'Mary', 'Zack' for $key (sort keys %ages)  {      print "$key is $ages{$key}\n"  }

ФУНКЦИЯ VALUES

Функция values возвращает обычный массив, состоящий из значений ассоциативного массива. Она имеет следующий формат:

@value_list = values(%Array)

Функция values возвращает массив значений ассоциативногомассива в виде регулярного списка. Следующий фрагмент программыиллюстрирует использование функции values:

   # Используем значения из предыдущего примера  %ages = ('Bob', 25, 'Mary', 30, 'Zack', 15);  @list = sort values %ages;     # @list (15, 25, 30)  @list = %ages; # @list ('Zack', 15, 'Bob', 25, 'Mary', 30)

ФУНКЦИЯ EACH

Функция each осуществляет итерации элементов в ассоциативном массиве. Она имеет следующий формат:

  @key_values = each(%Array);

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

# Используем значения из предыдущего примера %ages = ('Bob', 25, 'Mary', 30, 'Zack', 15); while (($name, $age) = each %ages)  {      # Выведем ages      print "$key is $ages{$key}\n";  }

ФУНКЦИЯ DELETE

Функция delete удаляет элементы ассоциативного массива. Онаимеет следующий формат:

Delete $Array{Key}

Следующая инструкция использует функцию delete для того,чтобы удалить элемент, отвечающий ключу Bob из ассоциативногомассива $Employees:

  Delete $Employees{'Bob'}

АРГУМЕНТЫ КОМАНДНОЙ СТРОКИ

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

while ($arg = shift @ARGV)  {      print "$arg\n";  }

ДОСТУП К ПЕРЕМЕННЫМ ОКРУЖЕНИЯ

Доступ к переменным окружения осуществляется в скриптах наязыке Perl также очень просто. Всякий раз при запуске скриптаPerl помещает копии переменных окружения в ассоциативный массив сименем %ENV. В следующей инструкции массив %ENV используется длявывода текущего каталога:

print "$ENV{PATH}\n";   # Выведет текущий каталог

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

$ENV{PATH} = 'c:\\myexec;'.$ENV{PATH};

Примечание: Изменения, которые скрипт делает в массиве %ENV, неповлияют на исходные переменные окружения. Иными словами, послеокончания работы скрипта переменные окружения системы не изменятся.

ФАЙЛОВЫЙ ВВОД И ВЫВОД

Perl специально разрабатывался для того, чтобы служить адекватным средством для чтения и записи в текстовые файлы. Тем неменее, как вы узнаете далее, Perl выполняет функции по произвольному доступу и вводу-выводу бинарных файлов. Операции по работе с файлами требуют указатель файла (file handle), который является переменной, соответствующей конкретному файлу. По умолчанию каждый скрипт на языке Perl имеет три стандартных указателя,которые Perl автоматически открывает при запуске скрипта: STDJN,STDOUT, STDERR. Эти три стандартных указателя отвечают стандартным потокам STDIN, STDOUT, STDERR языка программирования С. Кроме того, скрипт языка Perl может открыть дополнительные указатели для других специфических файлов.

ОТКРЫТИЕ ФАЙЛОВ И ДРУГИХ ПОТОКОВ

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

open(FileHandle[, FileName])

В отличие от функции open библиотеки времени выполнения языка С, функция open языка Perl не содержит параметра mode в вызове функции. Perl определяет режим (mode) открытия файла, основываясь на имени файла. Таблица 12.3 иллюстрирует связь режима открытия файла и имени файла.

Табл. 12.3. Соглашение об именах и режимах доступа файлов языкаPerl

Имя файла Операция
<FILE> Открыть файл только для чтения (аналогично <r> функции fopen)
<<FILE> Открыть файл для чтения (то же самое, что <FILE>)
<>FILE> Создать файл для записи (как <w> функции fopen)
<>>FILE> Открыть файл для добавления в его конец (как <г+> функции fopen)
<+>FILE> Создать файл для чтения/записи (как <rw> функции fopen)
<+<FILE> Открыть файл для чтения/записи (как <rw+> функции fopen)
<| CMD> Открыть канал из процесса, исполняющего команду <CMD>
<CMD |> Открыть канал процессу, исполняющему команду <CMD>


Примечание: Режим канального (pipe) потока может существовать не
на всех системах.

Если в вызове функции open опущено имя файла, то Perl подразумевает, что имя файла содержится в строковой переменной$FileHandle. Когда скрипт завершил использование файла, он закрывает его, используя функцию close, как показано ниже:

  close(FileHandle);

фрагмент программы иллюстрирует использование функций open иclose:

open(InFile, "test.dat") || die; # открываем для чтения                     # test.dat open(OutFile, ">test.dat") || die; # создаём test.dat $AuxFile = ">>test.dat"; open(Aux, $AuxFile) || die;   # открывает для дополнения                     # test.dat close(InFile); close(OutFile); close(Aux);

Обратите внимание, что указатели файлов не имеют обычных односимвольных префиксов. Как вы узнаете далее, скрипты языка Perlмогут хранить имена указателей в виде строк скалярных переменныхи передавать указатель любой функции, которая может их обрабатывать. При необходимости Perl выполняет конвертацию значений. В операционной системе MS-DOS Perl поддерживает дополнительную функцию, которая называется hinmode и позволяет файловому вводу/выводу переключаться между текстовым и бинарным режимами. В большинстве же систем различие между текстовым и бинарнымрежимами не имеет значения. Однако для операционной системыMS-DOS символ новой строки представляет собой последовательностьиз двух символов (CR+LF). Поскольку большинство программ не ожидают встретить два символа в конце строки, то система ввода/вывода должна выполнить преобразование. Для того чтобы можно было использовать функцию binmode, соответствующий указатель может бытьоткрыт. Функция binmode имеет следующий формат:

binmode(FileHandle);

Поделиться с друзьями:

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

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



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.011 с.