CuTTer (icutter@mail.ru)

Perl для перцев

Xakep, номер #020, стр. 020-042-5


$name=;

chomp ($name);

if (-e $name){

unlink ($name);

print "Файл $name удален";

} else {

print "Файл $name не найден";

}

Как видишь, -e возвращает 1 (истинна), если файл существует.

А теперь научимся переименовывать файлы. Для этого воспользуемся оператором rename. В качестве параметров используется старое имя файла и новое. Вот как переименовываются файлы:

rename ("old", "new") || die "Невозможно переименовать файл";

Функции: твои личные фрикции

Вот мы постоянно использовали функции print, chomp, пора бы и самому какую-нибудь придумать. :-)) Сейчас этим мы займемся. Наши функции называют подпрограммами, определяются в Перле они следующим образом:

sub имя {

оператор_1

оператор_2

}

Поле имя - это название процедуры (подпрограммы), которое может быть таким же, как и у скалярных переменных, массивов и хешей. Т.е. у нас возможен скаляр $some, массив @some, хеш %some и подпрограмма some. Когда подпрограмма вызывается, то выполняется весь блок операторов, который входит в нее, а вызывающему объекту возвращается какое-то значение. Посмотрим, как с ними работать:

$sum=sum (1,2);

print $sum;

sub sum {

($a, $b)=@_;

return ($a+$b);

}

На экране ты увидишь число 3 (хе-хе, процедура сложила 2 числа). Здесь уже используется новый массив @_, который в себе хранит все значения, передаваемые подпрограмме. В данном случае мы присваиваем переменной $a и $b значение 1 и 2. Как ты догадался, все значения возвращает оператор return. После его выполнения процедура прекращает свое действие, даже если бы еще следовали какие-нибудь операторы.

Процедуры использовать очень просто и в то же время удобно. Если ты будешь постоянно писать на Перле, то без них ты просто не обойдешься (как без ёнга :), если ты девушка - извини ;).

Но подпрограмме можно ничего не передавать, тогда перед вызовом процедуры надо поставить знак "&" или приписать фигурные скобки в конце подпрограммы.

А теперь я расскажу про локальные переменные в подпрограммах. Это такие переменные, которые действительны только в рамках данной подпрограммы. Их имена могут совпадать с именами глобальных переменных. Локальные переменные объявляются командой my. Вот пример, чтобы вкурить ее действие:

$test="Я - глобальная переменная!";

&show;

print "$test\n";

sub show{

my ($test);

$test="Я - локальная переменная!";

print "$test\n";

}

Наверное, ты подумал, что на экране появится дважды "Я - локальная переменная!", но нет, программа родит это:

Я - локальная переменная!

Я - глобальная переменная!

Позитивная динамика кода: отращиваем хобот

Например, можно по определенным критериям разбивать строки на поля. Это делается с помощью функции split, а потом, наоборот, склеить эти "разрезанные кусочки".

Начнем со split. Она получает какое-то выражение и строку и ищет в нем все экземпляры данного выражения. Не совпавшие части возвращаются в виде списка:

$value="ляля-кал-выкинь-отстой";

@values=split (/-/,$value);

foreach $cur (@values){

print "$cur\n";

}

После запуска на экране должна вылезти вот такая надпись:

ляля

кал

выкинь

отстой

Как видишь, split вернул все, что находилось между знаком тире (-). Эти данные присвоились массиву @values, и его содержимое мы вывели на экран. После такого надругательства над бедной переменной $value ее надо снова собрать по кусочкам:

Назад на стр. 020-042-4  Содержание  Вперед на стр. 020-042-6