我正在尝试逐行阅读文档,并且只对字母中的某些字符感兴趣,而不是新行字符。
我有以下内容:
@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中的单个char,或者此操作仅允许用于字符串?如果是这样,有办法解决这个问题吗?
答案 0 :(得分:5)
您可能代表=~
而不是==
。 ==
是相等的数字比较。 =~
在运算符的左侧调用常规模式匹配。
哦,你也应该use strict
和use warnings
,特别是在例子中。
欢迎使用StackOverflow。
答案 1 :(得分:3)
这可能有更优雅的方法,但您遇到的问题是您使用的是错误的操作符。 ==
表示“数字,等于”;在这种情况下,你问的是$ char是否匹配$_
与正则表达式的匹配(这不是你想要的!)
相反,您应该使用正则表达式匹配运算符:=~
。