1

我正在尝试逐行阅读文档,并且只对某些字母字符感兴趣,而不是换行符。

我有以下内容:

@chars = split //;

for $char (@chars) {
  if (   ($pos % 16569 == 1719)
      || ($pos % 16569 == 8251)
      || ($pos % 16569 == 10238)) {
    print FILE_OUT "$char\n";
  }

  if ($char == m/[A-Z]/) {
    $pos++;
  }

}

正则表达式m/[A-Z]/无法匹配,因为$pos从不增加。甚至可以匹配 Perl 中的单个字符,还是只允许对字符串进行此操作?如果是这样,有没有办法解决这个问题?

4

2 回答 2

5

您可能的意思是=~而不是==. ==是相等的数值比较。=~在运算符的左侧调用常规模式匹配。

哦,你也应该总是use strictand use warnings,尤其是在例子中。

欢迎来到 StackOverflow。

于 2013-01-11T16:35:18.270 回答
3

可能有更优雅的方法可以做到这一点,但您遇到的问题是您使用了错误的运算符。 ==意思是“数字,等于”;在这种情况下,您要询问 $char 是否与您的正则表达式匹配$_(这不是您想要的!)

相反,您应该使用正则表达式匹配运算符:=~

于 2013-01-11T16:36:27.693 回答