Мониторинг обменных курсов валют
18c0693f

Прототипы



Прототипы

Для краткого описания типа передаваемых подпрограмме параметров можно применять прототипы. Если формат передаваемых данных не будет удовлетворять шаблону прототипа, это вызовет ошибку программы. В 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
"; }} print
Добавить запись
Удалить запись номер:
END ; if ($FORM{'action'} eq "add") { open(file,">>file.txt"); print file "$FORM{'string'}\n"; close file; wiev; } elsif ($FORM{'action'} eq "del") { open(file,"file.txt"); @array=; close file; open(file,">file.txt"); $size=@array; for($i=0;$i wiev } else{wiev}

Не правда ли, ощутимая разница?

* * * *

Перепишите 3-4 написанные Вами программы с целью ввести туда процедуры.



Содержание раздела


Самый выгодный курс обмена валюты