использовать для:
1) переваривания javascript codа из html fileа, т.е. разбивки, на переменные, команды, блоки и т.п. Например каким нибудь модулем находится блок JavaScript и выдёргивается из html кода, а потом JavaScript обработчиком (parserом), выдернутый JavaScript кусок, разбивается на части (наверно tockenы). А я уже эти части перебираю, чтобы найти переменную, в корой есть json, например.
2) Выполнять JS code, с учётом окружения, в котором он находится. Например, если этот JS обрабатывает какие-то куски кода в HTML/CSS или AJAX какой-нибудь выполнить, например, чтобы этот JS модуль мог сделать так же, как настоящий JS.
???
Вам не в этот чат.
selenium
Стикер
Как это не в этот?
В вашем вопросе нету ничего про Perl
Я спрашивал про существование модуля(ей) и про возможность делать это на perlе
Это модуль такой есть на perlе?
Это что такое?
Это из Менделеева что-то, "Чистый селениум".
https://metacpan.org/pod/Selenium::Remote::Driver
"control any supported browser" - Это же дистанционное управление обозревателем, а я говорю JS, написанный на perl, или, хотя бы библиотека, которая может разбить JS code на куски, чтобы по этим кускам легче было находить нужные части, как PPI, например, разбивает perl code или как HTML::DOM, который разбивает HTML code, только для JS.
WWW::Mechanize::Chrome
"дистанционное" громко сказано. у меня один сервис только так и работает, локально поднят селениум с браузером и к нему коннектится скрипт. на тему интерпретации жс самому -- я однажды со сгенерированным жсом так обошёлся. регекспами приводил сгенерированную функцию к перловому коду и через сейф исполнял его
"дистанционно" - это я не имел ввиду, что на другом адресе каком то, а то, что это управление и получение данных с другой программы. Громоздкой, при чём.
JE парсит код js5 в perl и может его выполнять. То есть он не сможет распарсить классы (class A { a() {} }), лямбды a => a+1, строки с интерполяцией и прочие нововведения в современном js. Ну а DOM из HTML может построить HTML::TreeBuilder. Узнать как по нему искать можно посмотрев код Htmlquery.pm и тесты к нему
Надеюсь, его возродят
замыкание, closure
Это функция без имени, чтобы её можно было использовать в выражении: my $add1 = sub { $_[0]+1 }; print $add1->(5)
Ааа, самое понятное объяснение. Т.е., это анонимная функция.
Это sub {}. В переменную можно поместить на неё ссылку
Ну да, я это и понял.
это упрощенное объяснение. Главная суть замыканий в том, что они захватывают ("замыкают", не знаю почему такое слово) окружающий их контекст по использованным переменным
я не знал, что это lambdaми называли. В С++ постоянно слышал их упоминали, но раздражало, потому что я С++ не доучил до того уровня, где про lambdы объяснялось
Можно сразу выполнить лямбду никакой переменной её не присваивая, что используется в замыканиях и каррировании: (sub { my ($x, $y) = @_; sub { my ($z) = @_; $x*$z - $y } })->(10, 15)->(20)
в плюсы их совсем недавно завезли, потому что до того в Питоне или подобном просто кейворд lambda был использован
постоянно забываю, что такое каррирование... оно есть у нас в перле?
понижение к-ва аргументов ф-ции, "заморозка" аргумента и создание "новой ф-ции" с меньшим к-вом параметров
то есть вот это sub with_readline_vars { my ($app, $cb) = @_; my $term = $app->{_readline}; if (defined $term) { return $cb->( ReadLine => $term->ReadLine, Attribs => $term->Attribs, Features => $term->Features, IN => $term->IN, OUT => $term->OUT, ); } else { $app->{_readline_initcb} = $cb; return undef; } } sub _cmd_request_completions { my ($app) = @_; my $term = $app->{_readline}; my $attribs = $term->Attribs; return sub { my ($text, $line, $start, $end) = @_; # TRP will not set $end, avoid it my @matches; ... chop $prefix if $attribs->{completion_quote_character}; # FIXME if "\s ... @userret = $term->completion_matches($text, $userret[0]); каррирования?
Вообще-то каррирование в примере выше ) Каррирование – разбивка функции с несколькими аргументами на несколько функций с меньшим числом аргументов. То есть можно было сразу написать (sub { my ($x, $y, $z) = @_; $x*$z - $y })->(10, 15, 20) Но мы не ищем лёгких путей и заменили на `->(10, 15)->(20)` $)
Обсуждают сегодня