我正在尝试运行以下代码:
$lines = "Enjoyable )) DAY";
$lines =~ lc $lines;
print $lines;
它在第二行失败,我收到标题中提到的错误。我理解括号是造成麻烦的。我想我可以使用" quotemeta",但问题是我的字符串包含我以后继续处理的信息,所以我希望尽可能保持字符串的完整性并且不要篡改它得多。
答案 0 :(得分:4)
这里有两个问题。
<强> 1。 =~
用于执行一组特定的操作
=~
运算符用于匹配//
,m//
,qr//
或字符串;或者用s///
或tr///
代替。
如果你想做的只是小写$lines
的内容,那么你应该使用=
而不是=~
。
$lines = "Enjoyable )) DAY";
$lines = lc $lines;
print $lines;
<强> 2。正则表达式具有必须转义的特殊字符
如果您想将$lines
与$Lines
的小写版本匹配,如果$lines
已经完全小写,则应该返回true,否则返回false,那么您需要逃避&#34;)&#34;字符。
#!/usr/bin/env perl
use strict;
use warnings;
my $lines = "enjoyable )) day";
if ($lines =~ lc quotemeta $lines) {
print "lines is lower case\n";
}
print $lines;
请注意,这是一个试图找到执行$lines =~ lc $lines
的原因的玩具示例 - 使用eq
解决此问题会更好(更快,更安全),如$lines eq lc $lines
。 / p>
有关quotemeta的详细信息,请参阅perldoc -f quotemeta
或http://perldoc.perl.org/functions/quotemeta.html。
答案 1 :(得分:0)
=〜用于正则表达式。 “lc”不是正则表达式的一部分,它是这样的函数:$ new = lc($ old);
我不记得小写的正则表达式运算符,因为我一直使用lc()。