作者gugod (啊)
看板Perl
标题Re: [问题] Perl do 用法
时间Wed Feb 28 23:12:54 2018
※ 引述《gecer (gecer)》之铭言:
: my $line = "Just another regex hacker, Perl hacker, and that's it!\n";
: while( 1 )
: {
: my( $found, $type )= do {
: if( $line =~ /\G([a-z]+(?:'[ts])?)/igc )
: { ( $1, "a word" ) }
: elsif( $line =~ /\G (\n) /xgc )
: { ( $1, "newline char" ) }
: elsif( $line =~ /\G (\s+) /xgc )
: { ( $1, "whitespace" ) }
: elsif( $line =~ /\G ( [[:punct:]] ) /xgc )
: { ( $1, "punctuation char" ) }
: else
: { last; () }
: };
: print "Found a $type [$found]\n";
: }
: 小弟参考code 如上 请问这里的do {...}的用意? 非 do {..} while
以下是我的猜测... 这里一整段看起来类似
$a = ... ? ... : ...
的结构,只不过每一个部份都复杂一些。如果不这麽写,可能就要重复很多 ($found, $type),变成像这样:
my ( $found, $type );
if( $line =~ /\G([a-z]+(?:'[ts])?)/igc )
{ ( $found, $type ) = ( $1, "a word" ) }
elsif( $line =~ /\G (\n) /xgc )
{ ( $found, $type ) = ( $1, "newline char" ) }
elsif( $line =~ /\G (\s+) /xgc )
{ ( $found, $type ) = ( $1, "whitespace" ) }
elsif( $line =~ /\G ( [[:punct:]] ) /xgc )
{ ( $found, $type ) = ( $1, "punctuation char" ) }
else
{ last; () }
所以原作者就用 do {...} 来避免重复。
do { ... } 主要的语意是取得 { ... } 部份「最後执行语句之值」,这部份并不一定是「最末一句」,请稍微留意。
参考:
http://perldoc.perl.org/functions/do.html (do BLOCK 的部份)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 126.94.214.19
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Perl/M.1519830779.A.AB8.html
1F:推 herculus6502: d(`・?・)b 03/01 05:34
2F:推 flu: (^oo^) 03/01 21:13