Для краткого описания типа передаваемых подпрограмме параметров можно применять прототипы. Если формат передаваемых данных не будет удовлетворять шаблону прототипа, это вызовет ошибку программы. В Perl существуют следующие прототипы:
| sub mylink($$) | mylink $old, $new |
| sub myvec($$$) | myvec $var, $offset, 1 |
| sub myindex($$;$) | myindex &getstring, "substr" |
| sub myreverse(@) | myreverse $a, $b, $c |
| sub myjoin($@) | myjoin ":",$a,$b,$c |
| sub mypop(\@) | mypop @array |
| sub mysplice(\@$$@) | mysplice @array, @array, 0, @pushme |
| sub mykeys(\%) | mykeys %{$hashref} |
| sub myopen(*;$) | myopen HANDLE, $name |
| sub mypipe(**) | mypipe READHANDLE, WRITEHANDLE |
| sub mygrep(&@) | mygrep { /foo/ } $a, $b, $c |
| sub myrand($) | myrand 42 |
| sub mytime() | mytime |
Здесь:
Вставить часть CGI кода в программу, подобно SSI, можно с помощью функции "require". Её синтаксис прост до безобразия:
require "файл";
Пример кода, где подпрограмма загружается из внешнего файла:
# Файл sub.pl sub summ($$){ return ($_[0]+$_[1]) } # Файл со скриптом require "sub.pl"; print summ(5,2);* * * *
Напишем функцию, которая возвращает фактореал переданного ей числа.
sub fact{ # объявляем функцию fact my($sum,$i); # объявляем локальные переменные $sum=1; for ($i=1;$i<=$_[0];$i++){ $sum*=$i; } return $sum # возвращаем значение переменной $sum }Примеры вызова такой функции:
print fact(4);
print fact(4,22.8,5);
Результатом выполнения этого кода будет 24 Чтобы избежать вызова функции с ошибочными значениями, используем прототип $, означающий, что функции мы передаем только один парамер:
sub fact($){ my($sum,$i); $sum=1; for ($i=1;$iПерепишем программу 13 с учетом полученных знаний:
#!/usr/bin/perl # programm 17 print "Content-type: text/html\n\n"; &parse_form; sub wiev(){ open(file,"file.txt"); @array=; close file; foreach $i(@array){ $u++; print "$u. $i| Добавить запись | ||
| Удалить запись номер: |
Не правда ли, ощутимая разница?
* * * *
Перепишите 3-4 написанные Вами программы с целью ввести туда процедуры.