Сегодня открыл свой CGI-скрипт 2002 года, который до сих пор, кстати, работает, сто раз дописанный и истерзанный, но выполненный за это время 105 миллионов раз. Хочу показать тот фан, на который сегодня смотреть смешно, но девять лет назад приходилось с трудом выцарапывать из книг и интернетов.
Ввод-вывод
binmode STDIN;
binmode STDOUT;
Глобальные переменные
our $dbh;
our $sth;
Дата и время
Разбор дат после чтения из базы данных.
my ($year, $month, $day, $hour, $min, $sec) = $date =~ /^(\d{4})-?(\d\d)-?(\d\d) ?(\d\d):?(\d\d):?(\d\d)/;
Дорисовка ведущего нуля.
$mday = "0$mday" if $mday =~ /^\d$/;
$hour = "0$hour" if $hour =~ /^\d$/;
$min = "0$min" if $min =~ /^\d$/;
$sec = "0$sec" if $sec =~ /^\d$/;
return "$days[$wday], $mday-$mons[$mon]-$year $hour:$min:$sec GMT";
Сохранение даты в хеше.
%datetime = ();
($datetime{"sec"}, $datetime{"min"}, $datetime{"hour"},
$datetime{"day"}, $datetime{"month"}, $datetime{"year"},
$datetime{"wday"}, $datetime{"yday"}, $datetime{"isdst"}) = localtime (time);
$datetime{'month'}++;
$datetime{'year'} += 1900;
Работа со строками
Декодирование строки запроса.
sub _urldecode{
local($val)=@_;
$val=~s/\+/ /g;
$val=~s/%([0-9A-H]{2})/pack('C',hex($1))/ge;
return $val;
}
Отдельный фетиш — ручное декодирование UTF. В частности, есть такая таблица. И еще пара нетривиальных функций, которые я здесь не привожу.
sub init_utftable{
%utftable = (
0xD020 => 0x20,
0xD082 => 0x80,
0xD083 => 0x81,
0xE2809A => 0x82,
0xD193 => 0x83,
0xE2809E => 0x84,
. . .
0xD18D => 0xFD,
0xD18E => 0xFE,
0xD18F => 0xFF);
}
Смена регистра.
sub lower_case{
my $word = shift;
$word =~ tr /АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ/ абвгдеёжзиклмнопрстуфхцчшщъыьэюя/;
return lc $word;
}
sub upper_case{
my $word = shift;
$word =~ tr /абвгдеёжзиклмнопрстуфхцчшщъыьэюя/ АБВГДЕЁЖЗИКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ/;
return lc $word;
}
А перепиши его на модерн перле? Будет отличный блиц.
Пока переписал только под mod_perl :-) Там 100 килобайт.