0

作为一个非 Perl 程序员,我想确定我已经很好地理解了我将要移植到 Python 的结构,

使用时:

if (s/^([$PChar])(.)/$2/) {
  print $1,"\n";
  $finished = 0;
}
  • $1, $2 等匹配正则表达式
  • s/搜索/替换为/

我真的不确定匹配/替换是否在打印 $1 之前完成?并且它是否在当前缓冲区内“就地”完成(即 $F,即 $_ 逐行读取,按其空格字符拆分),这正在改变它(所以如果我理解得很好,([$PChar])当@字符串的开头在上述语句中被完全剥离/丢失时)?

编辑:不,也许它没有丢失,第一个括号部分被捕获,然后打印为 $1 + 换行符然后......不,不明白什么变成了 $2...... 可能是缓冲区更改为第二个括号部分?/结束编辑。

还有任何环境或允许在 Win 平台上进行一些逐步调试的最佳环境是什么?我知道有这个,我不会问这个问题。而且我不需要学习 Perl,只需要能够阅读和适应这个脚本。

这是引人入胜的部分:

@F = split;
for( $j=0; $j<=$#F; $j++) {
  my $suffix="";
  $_ = $F[$j];
  # separate punctuation and parentheses from words
  do {
$finished = 1;
# cut off preceding punctuation
if (s/^([$PChar])(.)/$2/) {
  print $1,"\n";
  $finished = 0;
}
# cut off trailing punctuation
if (s/(.)([$FChar])$/$1/) {
  $suffix = "$2\n$suffix";
  $finished = 0;
}

整个脚本 tokenize.pl 可以在这里看到,而原始的 tar.bz 如果从这里

此致

4

1 回答 1

2
# try to delete the first character from the string contained in
# $_ if that character is one of the characters contained in
# the string $PChar. The deletion is done by replace the first and
# second character by only the second character.
if (s/^([$PChar])(.)/$2/) {

  # if the replacement was successful, print the deleted character.
  print $1,"\n";
  $finished = 0;
}
于 2012-05-03T08:26:03.370 回答