请教一个关于perl的简单问题

请教一个关于perl的简单问题

请教一个关于perl的简单问题
看到下面这段程序
sub preprocess_msg_text {
my $self = shift;
my ($text) = @_;

$text = $self->SUPER::preprocess_msg_text($text);

unless ( $No_Wrap ) {
1 while $text =~ s/(^|\n)([^>\s].*[^.\n])\n([^>\n])/$1$2 $3/g;
1 while $text =~ s/(^|\n)([^>\s].*)\n([^>\n])/$1$2 $3/g;
}

return $text;
}

对于
1 while $text =~ s/(^|\n)([^>\s].*[^.\n])\n([^>\n])/$1$2 $3/g;
1 while $text =~ s/(^|\n)([^>\s].*)\n([^>\n])/$1$2 $3/g;
我不理解,这两句前面的“1”,是什么意思,为什么要它
还有,一般有"^"是表示所匹配不在此字符类的任何单个字符。
那这里的"|"表示的是什么
这两句分别是什么意思,有什么不同呀~

谢谢
1 while xxxx 相当于 wh.
1 while xxxx 相当于 while (xxx){1;}
其实这个语句完全可以不要 1 while
1 while $text =~ s/(^|\n)([^>\s].*[^.\n])\n([^>\n])/$1$2 $3/g;
可以直接换成 $text =~ s/(^|\n)([^>\s].*[^.\n])\n([^>\n])/$1$2 $3/g;

另外 ^ 在正则表达式里面有两个含义。
如果出现在表达式开头,表示从字符串的开头匹配。
(例如 /^abc/ 会匹配 "abcdefg" 字符串,但是不会匹配 "1abcdefg",因为 abc没有在开头)
如果出现在 []中,表示不在此字符类的任意字符。
| 表示任选其一的意思,即两者都可以。
(例如 /a|b/ 可以匹配 "1a2" 也可以匹配 "1b2")
哦,谢谢!.