Архив марта 2010

Perl, RegEx и LookAhead — форматируем MAC-адрес

Задача — из 001e8c15ffbc сделать 00:1e:8c:15:ff:bc
Решение —

perl -le 'my $x = «001e8c15ffbc»;$x =~ s/(...(?!\Z))/\1:/g; print $x'

Разберем по кусочкам этот примитив.
(...(?!\Z))/\1:
... — два любых символа (можно написать длиннее, если сомневаемся, что к нам придёт именно мак) — например, [a-f\d]{2}
(?!\Z) — заглянем вперёд — нет ли там конца строки. Если есть — не попадаем в условие и, соответственно, не заменяем.

Perl — удалить из массива несоответствующие условию элементы

Удаляем все элементы, которые не цифры. Работаем с референсом.

#!/usr/bin/perl
use strict;
use Data::Dumper;
my $a = [234235,'a',345,34234,23121];
$a = [grep {/^\d+$/ } @$a];
print Dumper $a;

UPD Rommeech заметил багу, исправил

Опять PHP — скрытая подмена понятий :)

<?
print_r ($_POST);
?>
<form method="POST">
<input name="через пробел">
<input type="submit">
</form>

Как вы думаете, что выведет print_r? Array ( [через пробел] => ) ? А вот и нифига!
Он выведет Array ( [через_пробел] => )

Кодировка по умолчанию — php много на себя берёт

Весь мозг себе сьел.
Перенёс сайт на сервер. На предыдущем хостинге было всё ок — открывался как надо, все дела.
На новой же системе — постоянный header UTF-8, хоть ты тресни. Я бы и рад конечно UTF — но HostCMS пока что поддерживает только Win1251 — так что стал копать.

Новый логин Вконтакте — Perl, Curl

Собственно, уже не мудрствуя лукаво — кто хоть немного знает перл — разберётся.
Вконтакте добавили редиректики, что не помешает доблестному Curl через них пройти и получить куку в файл.

#!/usr/bin/perl -w
use strict;
use WWW::Curl::Easy;
use Carp;

Любимая функция для получения контента

Таскаю за собой по всем модулям и скриптам.

sub getURL {
  my $params = shift;
  croak q[HASH needed as param] if ref ($params) ne 'HASH';
  croak q[HREF needed in HASH] if (!exists ($params->{href}));
  $params->{href} = q[http://].$params->{href} if $params->{href} !~ /^http (s)?:\/\//;
  $params->{headers} = 0 if !$params->{headers};
  $params->{ag} = qq ($user_agents[rand(($#user_agents+1))]) if !exists $params->{ag};
  $params->{timeout} = 20 if !exists $params->{timeout};
  $params->{content_length} = 600000000 if !exists [...]

«Защита» от обновления страницы по F5 :)

Навеяно SE и паранойей тамошнего ТС к ддос через F5 :DDD
<script type="text/javascript">
document.onkeydown = KeyCheck;
function KeyCheck (e) {
  var KeyID = (window.event) ? event.keyCode : e.keyCode;
  if (KeyID == 116){
    return false;
  }
}
</script>