Wak*_*nka 3 syntax perl dom html-parsing mojolicious
我正在尝试理解一些高级(对我来说)perl语法,用于在本教程后使用DOM进行html解析:
say "div days:";
say $_->text for $dom->find('div.days')->each;
say "\nspan hours:";
say $_->text for $dom->find('span.hours')->each;
Run Code Online (Sandbox Code Playgroud)
这个语法是什么意思?这是什么样的循环?建筑经典看起来像这样:for(i=0;i<10;i++){ code }不:{code} for (some_condition)
在这种情况下,"each"关键字的含义是什么?它是否与eachPerl内置函数有共同之处,或者它是否特定于Mojo :: DOM?我想如果each是在Mojo :: Dom下,应该在Mojo :: DOM主页上提及它.但是我没有each在他们网站的方法部分找到任何提及,所以它必须是Perl的内置函数.但是,这个内置each函数有一个完全不同的语法 - 这怎么可能?
教程页面的另一个例子
say "Open Times:";
say for $dom->find('div.openTime')
->map(sub{$_->children->each})
->map(sub{$_->text})
->each;
Run Code Online (Sandbox Code Playgroud)
say "Open Times:";
say for $dom->find('div.openTime')
->map(sub{$_->children->each})
->map(sub{$_->text})
->each;
Run Code Online (Sandbox Code Playgroud)
所有这些关键字(find,map,each)实际上不是关键字,但是从方法::魔DOM.您可以由->操作员识别它们.
在这种情况下,几种方法已被链接在一起.只有当它们中的每一个都$dom再次返回它的对象(在这个例子中)时,才有可能.这种链通常用于JavaScript,特别是对于像jQuery这样的现代框架.它使代码易于阅读并节省操作.
基本上,您在链中应用多个事务.
所有这些都包含在后缀中foreach(如@Quentin所述).say是您可以加载的功能use features qw(say).它结合了print一个换行符.
也许现在它更清楚这里发生了什么:
my $collection1 = $dom->find('div.oopenTime');
my $collection2 = $collection1->map(
sub {
my $collection = $_->children;
return $collection->each;
}
);
my collection3 = $collection2->map(
sub {
return $_->text;
}
);
foreach my $text ($collection3) {
say $text;
}
Run Code Online (Sandbox Code Playgroud)
提供自动完成功能的IDE通常会扫描相关代码以了解对象具有的方法.看一下如何在Perl中列出给定对象或包的可用方法?或者阅读模块的代码.更好的是:阅读文档.
这个语法是什么意思,这里发生了什么?
for (@foo) {
say $_
}
Run Code Online (Sandbox Code Playgroud)
可写成
say $_ for @foo;
Run Code Online (Sandbox Code Playgroud)
此外,"each"关键字在此上下文中的含义是什么
它是对象的一种方法.它返回Mojo :: Collection中的事物列表.