- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
sub Tgetent {
local($TERM) = @_;
local($TERMCAP,$_,$entry,$loop,$field);
# warn "Tgetent: no ospeed set" unless $ospeed;
foreach $key (keys %TC) {
delete $TC{$key};
}
$TERM = $ENV{'TERM'} unless $TERM;
$TERM =~ s/(\W)/\\$1/g;
$TERMCAP = $ENV{'TERMCAP'};
$TERMCAP = '/etc/termcap' unless $TERMCAP;
if ($TERMCAP !~ m:^/:) {
if ($TERMCAP !~ /(^|\|)$TERM[:\|]/) {
$TERMCAP = '/etc/termcap';
}
}
if ($TERMCAP =~ m:^/:) {
$entry = '';
do {
$loop = "
open(TERMCAP,'<$TERMCAP') || die \"Can't open $TERMCAP\";
while (<TERMCAP>) {
next if /^#/;
next if /^\t/;
if (/(^|\\|)${TERM}[:\\|]/) {
chop;
while (chop eq '\\\\') {
\$_ .= <TERMCAP>;
chop;
}
\$_ .= ':';
last;
}
}
close TERMCAP;
\$entry .= \$_;
";
eval $loop;
} while s/:tc=([^:]+):/:/ && ($TERM = $1);
$TERMCAP = $entry;
}
foreach $field (split(/:[\s:\\]*/,$TERMCAP)) {
if ($field =~ /^\w\w$/) {
$TC{$field} = 1;
}
elsif ($field =~ /^(\w\w)#(.*)/) {
$TC{$1} = $2 if $TC{$1} eq '';
}
elsif ($field =~ /^(\w\w)=(.*)/) {
$entry = $1;
$_ = $2;
s/\\E/\033/g;
s/\\(200)/pack('c',0)/eg; # NUL character
s/\\(0\d\d)/pack('c',oct($1))/eg; # octal
s/\\(0x[0-9A-Fa-f][0-9A-Fa-f])/pack('c',hex($1))/eg; # hex
s/\\(\d\d\d)/pack('c',$1 & 0177)/eg;
s/\\n/\n/g;
s/\\r/\r/g;
s/\\t/\t/g;
s/\\b/\b/g;
s/\\f/\f/g;
s/\\\^/\377/g;
s/\^\?/\177/g;
s/\^(.)/pack('c',ord($1) & 31)/eg;
s/\\(.)/$1/g;
s/\377/^/g;
$TC{$entry} = $_ if $TC{$entry} eq '';
}
}
$TC{'pc'} = "\0" if $TC{'pc'} eq '';
$TC{'bc'} = "\b" if $TC{'bc'} eq '';
}
Но повторюсь: "По существу надо, а не потому, что перл не нравится.",
Надо расписать конкретно почему здесь плохой код, а не постить, потому что perl не нравится.
Это я не чтоб вам надоесть, это я за чистоту говнокода.
Да хотя бы на тело цикла гляньте:
Это не говнокод?
Добавь автор явные строки, было бы лучше.
Обычно перловики (в отличии кстати от пхпшников) используют готовые модули, коих на CPANе пруд-пруди.
Так что автор этого кода видимо совершенно не понимал сути перла, наверное он много писал на php.
Хотя и этот код впринципе читаем.
зы: интересно, как бы автор переписал этот код на другой прекрасный язык программирования
Да, я тоже считаю, что автор данного кода не понимал сути перла и специализировался на php. Тем более, что этот код взят из файла lib/termcap.pl, поставляемого вместе с дистрибутивом Perl.
# $RCSfile: termcap.pl,v $$Revision: 4.1 $$Date: 92/08/07 18:24:16 $
...А теперь открываем исходник и читаем, что написано в комментариях ниже этой самой строчки SVN:
При этом было интересно наблюдать за реакцией, когда выдвинули предположение, что это php-шник писал :)
- злоупотребление "$_" - ставим галочку.
- злоупотребление регекспами - ставим галочку.
- предпочтение краткости удобочитаемости - ставим галочку.
Согласен, "как бы общеизвестный факт".
Что касается "галочек", то см: http://oreilly.com/catalog/9780596001735.
что Вас смущает? Регулярки?
два ваших последних говнокода, как бы это вежливее сказать, не доставляют достаточно положительных эмоций. длинные треды про "перл - говно" то ли печальны, то ли унылы.
именно поэтому появились вопросы:
- "что вас так задело?",
- "зачем вы тратите свое время на разбор стандартных модулей в поисках евалов и черезмеоного использования регеспов?",
- "кому и что вы пытаетесь доказать?"
да, пока только эти три.
Можно подумать что регулярки в его любимом php пахнут как-то иначе
Я думаю, категоричность и необъективность оценок -- следствие... как бы покорректнее выразиться... профессиональной изолированности.
Можно подумать что регулярки в его любимом php пахнут как-то иначе
Регулярки в PHP мало чем от перловких отличаются.
поолучится всего 3 результата. И в каждом случае eval абсолютно оправдан. К примеру, в модуле Benchmark.
не знаю что у вас "нет", но у меня стандартные модули лежат именно в \lib. может под стандартными модулями вы понимаете какие-то труЪ красноглазые модули. лично я под стандартными имел ввиду модули идущие в составе дистрибутива.
11 результатов на 914 файлов. Откуда число 101?
Benchmark.pm
Cwd.pm
diagnostics.pm
Errno.pm
Fatal.pm
JSON.pm
SelfLoader.pm
Shell.pm
Thread.pm
threads.pm
version.pm
Win32.pm
ActiveState\ModInfo.pm
ActiveState\Scineplex.pm
Archive\Zip\BufferedFileHandle.pm
Archive\Zip\MemberRead.pm
Archive\Zip\MockFileHandle.pm
Attribute\Handlers.pm
Class\Struct.pm
Compress\Zlib.pm
Compress\Raw\Bzip2.pm
Compress\Raw\Zlib.pm
CPAN\Distribution.pm
CPAN\Distroprefs.pm
CPAN\InfoObj.pm
CPAN\Kwalify.pm
CPANPLUS\Dist\Build.pm
CPANPLUS\Internals\Source.pm
CPANPLUS\Shell\Classic.pm
CPANPLUS\Shell\Default.pm
Data\Dump.pm
Data\Dumper.pm
DBD\Proxy.pm
Devel\Peek.pm
Encode\Alias.pm
ExtUtils\CBuilder.pm
ExtUtils\Install.pm
ExtUtils\Installed.pm
ExtUtils\Packlist.pm
File\CheckTree.pm
File\Fetch.pm
File\Spec.pm
File\Spec\Cygwin.pm
File\Spec\Epoc.pm
File\Spec\Functions.pm
File\Spec\Mac.pm
File\Spec\OS2.pm
File\Spec\Unix.pm
File\Spec\VMS.pm
File\Spec\Win32.pm
HTML\AsSubs.pm
HTML\Entities.pm
HTTP\Status.pm
IO\Dir.pm
IO\Handle.pm
IO\Seekable.pm
IO\Socket\UNIX.pm
List\Util.pm
List\Util\PP.pm
List\Util\XS.pm
Locale\Maketext\GutsLoader.pm
Math\Complex.pm
Module\Build.pm
Module\Build\Base.pm
Module\Build\Config.pm
Module\Build\ModuleInfo.pm
Module\Build\Notes.pm
Module\Build\PodParser.pm
Module\Build\PPMMaker.pm
Module\Build\Version.pm
Module\Build\Platform\aix.pm
Module\Build\Platform\Amiga.pm
Module\Build\Platform\cygwin.pm
Module\Build\Platform\darwin.pm
Module\Build\Platform\Default.pm
Module\Build\Platform\EBCDIC.pm
Module\Build\Platform\MacOS.pm
Module\Build\Platform\MPEiX.pm
Module\Build\Platform\os2.pm
Module\Build\Platform\RiscOS.pm
Module\Build\Platform\Unix.pm
Module\Build\Platform\VMS.pm
Module\Build\Platform\VOS.pm
Module\Build\Platform\Windows.pm
Net\Ping.pm
Net\Telnet.pm
Scalar\Util.pm
Scalar\Util\PP.pm
SQL\Statement.pm
Sub\Uplevel.pm
Term\Cap.pm
Test\Builder.pm
Test\More.pm
Test\Simple.pm
Test\Builder\Module.pm
Text\Diff\Table.pm
threads\shared.pm
Time\HiRes.pm
version\vxs.pm
Win32\TieRegistry.pm
И так почти везде. К алгоритмам это не имеет никакого отношения.
$VERSION = '0.3607';
$VERSION = eval $VERSION;
Module::Install, где парсеру правильнее давать строку. В то же время, в рантайме номер версии должен быть числом.
Это необходимо, если версия выглядит как: 0.001_001. Без кавычек парсер установщика неверно проинтерпретирует ее как число 0.001001. Тогда как часть после подчеркивания здесь, по соглашению, является постфиксом, указывающим на девелоперский релиз.
Ну тоже знатное говнецо.
Что-то не понял, вы спамите тут книжками по перлу за $49.99?
Т.е. достаточно глянуть только на обложку книги, как сразу все вопросы, заданные seonull отпадут сами собой?
А ну ка, попробую. Смотрю на обложку книги... Вижу: верблюды, Perl... Ясно, рас там Perl, в таком случае вопросы отпадают. ДА и какие тут могут быть вопросы, если это перл :)
Точно глянули? А то там не верблюды, а собачка. Ниже текст на три экрана и оглавление, а под ними -- интервью с автором.
в 92м году вообще писали немного иначе (поищите сырцы любой программы 1992го года).
Кроме того этот файл не рефакторят (там написано что no longer being maintained).
Вместо того, что бы искать файлы 20ти летней давности и смеятся над ними -- занялись бы лучше самообразованием, глядишь поумнеете.