Недавно узнал о существовании специальной переменной Perl, которая называется "_". Да-да, это именно "_", а не $_.
Переменная $_, как известно, является "местоимением" в Perl. Например, рассмотрим предложение: "Брать каждый новый лепесток из цветка и выбрасывать его." В этом предложении слово "его" соответствует переменной $_. Сейчас объясню.
На Perl это будет выглядеть так:
foreach(@flower) {
print("Выбросил $_<br>\n");
}
Надеюсь, понятно. Переменной $_ присваивается временное значение при итерациях цикла, например. К этой переменной обращаются некоторые функции если не указано иное. Например:
foreach(@flower) {
s/blue/pink/g;
print("Выбросил $_<br>\n");
}
В этом случае мы заменяем для каждого лепестка цвет blue на pink. Такая запись эквивалентна такой:
$_ =~ s/blue/pink/g;
Теперь о переменной _.
Узнал от своего начальника и заядлого перловика о ней. Полез и почитал сам. Оказалось, что это не совсем переменная. Это дескриптор файла, что развеивает магию вокруг переменной без префикса "$".
Так что же делает этот дескриптор и откуда берется?
Рассмотрим код:
if(-e "./path2/file.dat") {
if(-z _) {
print "OK";
}
}
Сначала мы проверяем файл на существование. Но потом мы проверяем _ на предмет пустоты.
Дело в том, что для получения атрибутов команды -e, -d, -z и подобные неявно вызывают функцию stat для файла. И просто возвращают один из элементов результирующего массива. (Ведь мы помним, что функция stat возвращает массив)
Затем происходит кэширование результатов изъятия атрибутов для дескриптора файла _. И когда мы вызываем новую проверку атрибута файла для _, функция stat уже не вызывается, что несколько экономит время и ресурсы, да.
Вот такая небольшая хитрость.
Часто бывает нужно ограничить доступ пользователей к определенным зонам вашего сайта. Например, к административной части. Часто это делают, создавая свой механизм авторизации. Однако, существует способ защитить зоны сайта с помощью встроенных средств сервера и браузера. Простейшая авторизация носит название Apache Basic authorization. Это будет большая статья, так что приготовьтесь к основательному чтению. Но зато в ней будет все, что вам когда-нибудь понадобится для работы с этим видом авторизации.
Сегодня поговорим о довольно сложной и интересной области программирования — об обработке текста. Так как работа в web — это почти всегда работа с текстом, то эта статья может оказаться вам полезной.
Дело в том, что для компьютера задачи, связанные с текстом, очень сложны. Он создан, чтобы работать с числами, а не с буквами. А понимать смысл слов программы пока еще не научились (на сколько мне известно). Тем не менее, работать с текстами нужно постоянно. И часто встречаются задачки, которые не составляют труда для человека, но могут оказаться довольно сложными для автоматического решения.
Ответтье на вопрос: похожи ли строки "Машка" и "Миша"? На самом деле, для компьютера не важно что вы ответите. Для него весь мир — числа. Поэтому ему не важно похожи ли эти строки. Для него интереснее НА СКОЛЬКО эти строки похожи или не похожи. А вот с этим вопросом не каждый человек сходу справится.
Сегодня я расскажу у метрике Левенштейна, которая позволяет вычислять "расстояние" от одной строки до другой.
У php-шников есть удобная функция last_insert_id(), которая возвращает id записи, которая была последней вставлена текущим соединением.
В перл можно использовать поле объекта соединения с БД
$dbh->{mysql_insertid};
Гистограмма (от греч. histos, здесь — столб и ...грамма), столбчатая диаграмма, один из видов графического изображения статистического распределения каких-либо величин по количественному признаку. ("Большая советская энциклопедия").
Сегодня захотел написать библиотечку для построения гистограмм, или столбчатых диаграмм. Вот таких вот:
И написал :)
Если вы собираетесь заняться разбором HTML или XML, то класс Perl, который мы разработаем в этой статье, может помочь вам в этом деле.
Не буду здесь грузить про то, зачем нужно грабить и парсить. Остановимся на том, что у нас есть текст, который очень похож на XML. И нам нужно его быстро и грамотно распарсить.
Как вы думаете, что работает быстрее?
print '1','2';
или
print '1'.'2';
Проведем маленький тест и выясним это раз и навсегда.