LINUX.ORG.RU

Кто может помочь изучить Perl по готовому коду?

 , ,


1

2

есть информационная система на perl многое мне не понятно так как не сталкивался с perl и не пойму что? где? куда? Рылся в документации и зарылся так, что теперь вообще мозг забит всякой дрянью:(

Давай вместе разбираться! Ты пиши, что не понятно, и, надеюсь, тебе помогут.

alozovskoy ★★★★★
()
Ответ на: комментарий от Kalashnikov

а видимо если в форме выбираешь из списка значение он сразу выводит другую форму с помощью скрипта

BooleanDir
() автор топика

По готовому перл-коду скорее диагноз его автору поставить можно, чем научиться. Читай книги, потом возвращайся к коду.

redgremlin ★★★★★
()

что значит # в переменной $#perem допустим в цикле есть такая запись for ($i=1;$i<=$#perem;$i++) хотя данные сохраняются в переменную $perem

BooleanDir
() автор топика

if($user!~/fdc|ggf|gfgfg|hgyh|hththt/) как по русски будет звучать это условие?

BooleanDir
() автор топика

$pr=param('pg')=~/^(cent|als|grs|exam|pro|ist)$/; слева переменная справа рег.выражение побитовое сравнение.... то есть как? русскими словами объясните как это =~ в литературе я так и не понял.

BooleanDir
() автор топика
Ответ на: комментарий от BooleanDir

твоюжмать

for($i=1;$i<=$#perem;$i++)

оратор про диагноз был прав.

Stil ★★★★★
()

ну вот еще моментик... на сегодня последний) $page= /^$/ && '0' || /^students$/ && '1' || /^search$/ && '2' || /^akadem$/ && '3' || /^otchislen$/ && '4' || /^otpusk/ && '5' || '0'; как это присвоить переменной по русски?

BooleanDir
() автор топика

Рэндал Л. Шварц, Том Кристиансен. «Изучаем Perl»

/thread

router ★★★★★
()
Ответ на: комментарий от BooleanDir

Плохо читал. Все твои вопросы на данный момент возникли из-за незнания простейшего синтаксиса языка. Тут нет даже каких-то хитрых конструкций.

for ($i=1;$i<=$#perem;$i++)

Массив @perem перебирается по порядку, начиная с элемента с номером 1 и заканчивая последним. Собственно $#perem - количество элементов массива начиная с нуля.

if($user!~/fdc|ggf|gfgfg|hgyh|hththt/)

Если в строке $user не присутствует подстроки fdc, ggf и так далее, то условие верно.

$pr=param('pg')=~/^(cent|als|grs|exam|pro|ist)$/;

Если результат функции param() с аргументом pg возвращает строку cent или als, или grs и т.д., то переменная $pg true, иначе false. Функция param(), судя по всему из модуля CGI.

if($db->numrows && !$pr )

$db - это, видимо, запрос к базе, а метод numrows, похоже, возвращает количество строк в ответе на этот запрос. Собственно, условие звучит так: если ответ базы не нулевой и переменная $pr == false.

В общем, два вывода.

1. Ничего ты не читал и даже не пытался разобраться, потому как всё это базовый синтаксис перла, доступный после прочтения десятка простейших примеров с пояснениями. Никакого волшебства.

2. Писал это всё тот ещё быдлокодер и я бы не советовал «учиться» по такому примеру.

shell-script ★★★★★
()
Последнее исправление: shell-script (всего исправлений: 1)
Ответ на: комментарий от BooleanDir

=~ это значит, что для param('pg') выполняется регулярное выражение. Но должно быть как-то так:

$pr=param('pg')=~m/^(cent|als|grs|exam|pro|ist)$/;

буква m перед косой чертой - match, т.е. проверка на регулярку. Результат присваивается в переменную $pr. Там будет истина или ложь в зависимости от того, прошла проверка на регулярку или нет.

bvn13 ★★★★★
()
Ответ на: комментарий от BooleanDir

if($db->numrows)

значит, что эта переменная заполнена хоть чем-то. Остальная часть условия - понятна и так.

bvn13 ★★★★★
()

Прочитай «Изучаем Perl». Очень, ОЧЕНЬ хорошая книга для начинающих.

по готовому коду?

Для этого нужно иметь некоторые скиллы, а их нет,судя по всему.

anonymous
()
Ответ на: комментарий от BooleanDir

=~ и в баше есть. Означает нечёткое сравнение(по regexp'у). Всё, что попадает под шаблон(регулярку) - удовлетворяет условие сравнения. Очень удобная фича. В PHP для такого сравнения дополнительно нужно функцию заюзать, что совсем не комильфо.

lucentcode ★★★★★
()
Ответ на: комментарий от BooleanDir

Я в Perl не в зуб ногой, но судя по написанному, присвоить по нормальному(в стиле PHP) можно только используя длинющую строку с тернарными операторами, или разлапистый код с if-else, или case. Будет не красиво. Чем вас существующий код не устраивает? Ускоренные логические операторы - очень няшное решение. Было бы такое в PHP, я бы от радости прыгал до потолка.

lucentcode ★★★★★
()
Последнее исправление: lucentcode (всего исправлений: 1)

Огромное спасибо всем кто не оставил без внимания. Отдельная благодарность shell-script. И сразу отвечу на комментарии.... Названые книги я читаю потихоньку... все заданные мной вопросы с примерами я понимал, но на уровне интуиции, в литературе не нашел некоторые выражения. А интуитивно я понимал что !$a это false и то что && это И но вот то что $#a начинается с нуля я нигде в литературе не встретил... теперь я могу не интуитивно а с уверенностью смотреть код дальше... если не против, в эту же тему буду задавать вопросы для вашего повторения для моего изучения вопросы.

BooleanDir
() автор топика
Ответ на: комментарий от BooleanDir

Там выше рекомендовали уже книгу с верблюдом. Я бы ещё порекомендовал «Perl. Библиотека программиста» Кристиансена и Торкингтона. Ну и само собой perldoc. А в данном случае для начала perldoc perlsyn. Просто на данный момент ты тупо упираешься в незнание синтаксиса перла.

shell-script ★★★★★
()
Ответ на: комментарий от shell-script

хорошо бы пару лет потратить на изучение английского а потом вернуться к литературе perldoc.... а потом идти внуков нянчить

BooleanDir
() автор топика
Ответ на: комментарий от BooleanDir

Я читаю на английском, поэтому ничего по поводу перевода сказать не могу. А вот книжки в сети есть на русском, можно и с них начать, если уж сильно тяжко с английским.

shell-script ★★★★★
()
Ответ на: комментарий от bvn13

$#perem - индекс последнего элемента

scalar@perem - длина массива

vividsnow
()
Ответ на: комментарий от lucentcode

Я уверен, что все эти students, otpusk и т.д. используются в коде неоднократно. А значит подобные портянки повторяются по множеству раз. И мало того, что оно тяжелочитаемо(ага, потом ещё говорят, что perl writeonly из-за подобных программистов), так его ещё и копипастить кучу раз придётся. Это раз.

Два заключается в том, что здесь данные находятся в коде. По логике названий - это различные состояния (студент, отчислен, в отпуске и т.д.). Такое должно быть в базе в таблице status с полями id и status_name.

Но даже если хочется в код запихать, можно было бы хотя бы как-то это дело упорядочить. Ну, на вскидку:

my %status = (
    students    => 1,
    search      => 2,
    akadem      => 3,
    otchislen   => 4,
    otpusk      => 5
);

my $given_var = shift;

my $page = $status{$given_var};
Хотя мне лично в принципе не понятно, зачем делать такой перевод имён в цифры.

shell-script ★★★★★
()
Последнее исправление: shell-script (всего исправлений: 1)
Ответ на: комментарий от shell-script

Да, по идее, хранить статусы и их ID-шки стоило бы в базе.

lucentcode ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.