Perl для системного администрирования


           

к чтению файла базы данных


open(DATA,Sdatafile) or die "Невозможно открыть файл с данными:$!\п"; $/=$recordsep; и подготовка к чтению файла базы данных по одной записи

print "#\n# host file - GENERATED BY $0\n# DO NOT EDIT BY HAND!\n#\n"; while (<DATA>) {

chomp; и удалить разделитель записей

П разбить на key1,value1,...bingo, хэш записей

%record = split /:\s*|Wm;

print "$record{address}\t$record{name} $record{aliases}\n"; } close(DATA);

Вот что получается:

#

# host file - GENERATED BY createhosts

« DO NOT EDIT BY HAND!

192.168.1.11 shimmer shim shimmy shimmydoodles 192.168.1.3 bendir ben bendoodles

192.168.1.12 Sulawesi sula su-lee

1Q9 1RR 1 R^ sanrlpr чяпН\/ mir.k\/ rnirk\/r1nn

Теперь посмотрим на некоторые более интересные Perl-технологии ил этого небольшого отрывка программы. Первое необычное наше действие - установка переменной $,/. Начиная отсюда, Perl считает кусочки текста, заканчивающиеся символами - = -у\ одной записью. Это означает, что while за один раз прочитает всю запись и присвоит ее переменной $ .

Вторая интересная вещь - это технология присвоения значений средствами split. Наша цель состоит в получении хэша, ключами которого являются имена полей, а значениями - значения полей. Зачем нам это надо, станет понятно позже, когда мы будем расширять пример. Первый шаг заключается в разбиении $_ на части при помощи spiuO. Массив, который получается в результате работы split(), приведен в табл. 5.1.

Таблица 5.1. Массив, возвращенный функцией split ()































































































































































Элемент




Значение


$record[0]


Name


$record[1]


Shimmer


$record[2]


Address


$record[3]


192.168. 1.11


$rocord[4]


Aliases


$record[5]


Shim shimmy shimmydoodles


$record[6]


Owner


$record[7]


David Davis


$record[8]


Department


$record[9]


Software


$record[10]


Building


$record[11]


Main


$record[12]


Room


$record[13]


909


$record[14]


Manufacturer


$record[l5]


Sun


$record[16]


Model


$record[17]


UltraGO
<

Содержание  Назад  Вперед