Re: perl -> c#
От: Pasha1st  
Дата: 04.09.08 03:38
Оценка: 2 (1)
Здравствуйте, elar, Вы писали:

E>$socket = IO::Socket::INET->new(PeerAddr => "mysite:80");

E>($uploadserver) = <$socket> =~ /\r\n\r\n(\d+)/;

E>Если возможно переведите на C#. Или объясните, что означает 2-я строка. Заранее благодарен.

E>(P.S. perl-недружелюбный язык. Особенно,когда его не знаешь. )

ЕМНИП разбираем вторую строку:
<$socket> — читаем из сокета все что там есть
=~ — натравляем шаблон на данные
<$socket> =~ /\r\n\r\n(\d+)/;
прочитанное разбиваем по шаблону — ищем двойной перевод строки за которым следуют цифры (они нам и нужны)
результат присваиваем ($uploadserver). А в скобках — чтобы присвоился не массив а первое значение из массива

Все очевидно
perl -> c#
От: elar  
Дата: 04.09.08 02:36
Оценка:
Помогите разобраться с кодом (perl)

$socket = IO::Socket::INET->new(PeerAddr => "mysite:80");
($uploadserver) = <$socket> =~ /\r\n\r\n(\d+)/;

Если возможно переведите на C#. Или объясните, что означает 2-я строка. Заранее благодарен.
(P.S. perl-недружелюбный язык. Особенно,когда его не знаешь. )
Re: perl -> c#
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 04.09.08 05:03
Оценка:
Здравствуйте, elar, Вы писали:

E>Помогите разобраться с кодом (perl)


E>$socket = IO::Socket::INET->new(PeerAddr => "mysite:80");

E>($uploadserver) = <$socket> =~ /\r\n\r\n(\d+)/;

E>Если возможно переведите на C#. Или объясните, что означает 2-я строка. Заранее благодарен.


<$socket> — чтение из сокета построчное (функция readline). Далее к результату применяется проверка по шаблону, по которой вылавливается одно число после двух CRLF подряд — насколько я понимаю, это ответ сервера... (тут непонятно алгоритмически — если порт 80, значит, HTTP, и надо было ещё запрос дать — Вы его скипнули?) Если это HTTP, то число — значение первой строчки тела ответа (потому что два CRLF — это конец заголовка и разделитель заголовка с телом). И в итоге оно (число) записывается в переменную $uploadserver.

E>(P.S. perl-недружелюбный язык. Особенно,когда его не знаешь. :xz: )


Ну в таком стиле особенно. Я на перле пишу, но стараюсь подобного не применять. Но есть любители лаконичности...
The God is real, unless declared integer.
Re[2]: perl -> c#
От: Roman Odaisky Украина  
Дата: 04.09.08 07:27
Оценка:
Здравствуйте, netch80, Вы писали:

E>>($uploadserver) = <$socket> =~ /\r\n\r\n(\d+)/;

N>Я на перле пишу, но стараюсь подобного не применять. Но есть любители лаконичности...

Зачем в таком случае использовать Perl?!

По-моему, это вполне безобидная конструкция, не засоренная императивным оверхедом.

Еще при желании можно так:
$uploadserver = $1 if <$socket> =~ /\r\n\r\n(\d+)/;

но это уже вылез if.

Кстати, если $/ != undef, то <$socket> выдаст только одну очередную строчку, верно?
До последнего не верил в пирамиду Лебедева.
Re[3]: perl -> c#
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 04.09.08 09:00
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, netch80, Вы писали:


E>>>($uploadserver) = <$socket> =~ /\r\n\r\n(\d+)/;

N>>Я на перле пишу, но стараюсь подобного не применять. Но есть любители лаконичности...

RO>Зачем в таком случае использовать Perl?!


Удобно для мелких скриптов.

RO>По-моему, это вполне безобидная конструкция, не засоренная императивным оверхедом.


Как ты определяешь, как именно выполняется здесь readline — скалярно одну строку, скалярно весь файл или списочно? А почему именно так?

RO>Еще при желании можно так:

RO>
$uploadserver = $1 if <$socket> =~ /\r\n\r\n(\d+)/;

RO>но это уже вылез if.

RO>Кстати, если $/ != undef, то <$socket> выдаст только одну очередную строчку, верно?


Вот это и мне интересно.
The God is real, unless declared integer.
Re[4]: perl -> c#
От: Vamp Россия  
Дата: 04.09.08 16:43
Оценка:
N>Как ты определяешь, как именно выполняется здесь readline — скалярно одну строку, скалярно весь файл или списочно? А почему именно так?
Это от контекста зависит и $/. Контекст здесь скалярный, так что либо весь текст в одну строку, либо первая строка. Что именно — зависит от $/. undef там не видно, но с другой стороны, первая строчка не начинается с переводов строк...
Да здравствует мыло душистое и веревка пушистая.
Re[5]: perl -> c#
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 04.09.08 18:23
Оценка:
Здравствуйте, Vamp, Вы писали:

N>>Как ты определяешь, как именно выполняется здесь readline — скалярно одну строку, скалярно весь файл или списочно? А почему именно так?

V>Это от контекста зависит и $/.

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

Потому я написал "Как ты определяешь", а не "какой контекст". Но, видимо, народ у нас привык читать только каждое третье слово.
The God is real, unless declared integer.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.