4.continue,当判断条件成立执行循环体之后,执行continue后的内容。注意,如果循环体内有next,next执行之后continue也会执行。如果循环体内有last,last执行之后不执行continue。

5.redo,直接将控制转到循环体第一行,redo之后的语句不执行。如果有continue,在redo将控制转到循环体第一行之前不执行continue。与next存在差别,请仔细区分。

四、分句脚本的详解。

前文以不涉及分句脚本的方式将用到perl基本语法简要介绍了一下。下面针对分句脚本进行学习。

在while(@ARGV)之前,脚本先后指定了标准输入输出的编码格式,然后定义了常用的变量。如前缀数组,如语言类型等。

while (@ARGV) {
$_ = shift; #是 $_=shift(@ARGV); 的简写,将数组的第一个元素移除并赋值个特殊变量$_。$_是默认输入和模式匹配内容,特殊变量最常用的操作就是省略,这就导致了代码对于初学者不易读。
/^-l$/ && ($language = shift, next); # 也是简写,相对完整的写法如下
/^-q$/ && ($QUIET = 1, next); #循环体内其他代码也是类似的简写。
/^-h$/ && ($HELP = 1, next);
}
/^-l$/ && ($language = shift, next);相对完整的代码如下:
if ($_m/^-l&/ ){ # 如果$_匹配成功
$language = shift(@ARGV); # 从@ARGV中再取出一个元素赋值给$language
next; # 结束本次循环,开始下次循环
}
while(@ARGV){}   是一个标准循环。在调用脚本的时候将参数定义为数组,传递给@ARGV。
if (!(-e $prefixfile)) {}    -e 文件名 用于判断文件是否存在。
my $text = "";
while() { # 对标准输入进行循环,如果是<>,则是对文件输入进行循环
chop; # 早期版本是 chomp; 完整的代码应该是$_=;chop($_); 对输入内容去除最后一个字符或数组中每个元素的最后一个字符,通常用于去掉换行符。
if (/^<.>$/ || /^\s*$/) { # 对$_进行正则匹配 ,如果是特殊变量$_,很多地方可以省略。匹配模式m,也可以省略。
#time to process this block, we've hit a blank or 
&do_it_for($text,$_); #当输入的内容是空行或者
,就开始调用方法处理已输入内容
print "
\n" if (/^\s*$/ && $text); ##if we have text followed by 
$text = "";
}
else {
#append the text, with a space
$text .= $_. " "; # . 用空格连接字符串
}
}
sub do_it_for { #定义方法
my($text,$markup) = @_; # @_变量用来传递变量
print &preprocess($text) if $text; # 如果$text 不为空,则调用preprocess函数。
print "$markup\n" if ($markup =~ /^<.>$/);
#chop($text);
}

关于preprocess函数,需要深度了解正则表达式,其他的基础语法上文已经基本涵盖。

$text =~ s/ +/ /g;    #将多个空格替换为单个,全局模式。 s是正则中的替换模式,=~s/// eg: 变量=~s/正则表达式/替换后内容/ 是将变量按正则替换为指定表达,并赋值给变量。

$text =~ s/([?!]) +([\'\"\(\[\¿\¡\p{IsPi}]*[\p{IsUpper}])/$1\n$2/g;        # $1\n$2 是正则的分组,由于替换后将原文分为两组,对正则的解读就需要注意分组来解析。

关于正则的内容,经过这个脚本的学习,再不敢言说自己懂正则表达式了。再赘述两句关于正则的内容,块和分组。

块的使用增加了正则对unicode的支持,使用的方法如: \p{Upper} 匹配大写字母,等效于[A-Z] 。早期的perl分句脚本中有对其他语言块的专门匹配,语言块请参考资料1的Unicode块和分类章节。

分组,应该算是正则表达式的高级内容。以左小括号出现顺序来确定排序。如:((A)(B(C)))

分组0表示表达式自身匹配到的内容。

分组1:((A)(B(C)))

分组2:(A)

分组3:(B(C))

分组4:(C)

分组还涉及到不捕获和断言,有兴趣的自己看吧,相关资料比较多,没用多少不敢乱说。