Создание серверных приложений на языке PERL


Программа вывода номеров журнала


Еще один пример использования хеша массивов для вывода содержания журнала за несколько лет календарем. Есть директория с файлами содержания журнала по номерам вида:

1.1996.txt

2.1996.txt

3.1996.txt

4.1996.txt

5.1996.txt

...

и т.д. до

5.2001.txt

где первая цифра в названии файла это содержание журнала за данный месяц, а вторая это год.

Читаем эту директорию в массив и вызываем подпрограмму:

while(<$dir/journal/*.txt>){push(@files, $_)}

&calendar;

sub calendar{

print qq~<center><font><b>Содержание

по номерам</b></font><p></center>~;

@year1=grep{!$test{$_}++ if(/^(\d+)$/)} #выделяет число лет, за которые есть номера журнала

#и заодно удаляет одинаковыен года, т.к.

#на каждый год приходится не больше 12

#файлов: 1.1996, 2.1996, 3.1996...

map{/\.(\d+)/, $_} @files; #выделяет года и заносит их во временный массив

foreach $line(@year1){ #цикл по годам.

foreach $files(@files){

push @{$numbers{$line}}, $files if($files=~m/$line/);

#здесь производится заполнение хеша массивов ключами,

#которые являются годами, а значениями хешей буду являться

#массивы номеров журнала за данный год, который является ключом.

#т.е. в результате должно получиться что-то вида:

#%hash = (

# 1996 => ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],

# 1997 => ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],

# ...

# 2001 => ["1", "2", "3", "4", "5"] #до пятого номера потому, что

#шестой номер на момент написания этого

#примера еще не вышел.

#);

}

}

print "<center><table>"; #открываем табличку для вывода результатов

for $key (sort keys %numbers){#цикл по отсортированным в порядке возрастания годам




Начало  Назад  Вперед



Книжный магазин