2010-11-10 163 views
4

我是新来的Perl所以这也许是很愚蠢的问题,但我无法找出:(//和m //是否有区别?

如果我有:

$stringA =~ /regex/; 
$stringB =~ m/regex/; 

从我的测试,$stringA = $stringB有什么它们之间的区别?

感谢。

+3

避免使用'$ a'和'$ b'作为变量名是个好主意,因为它们都被Perl'特别'处理。 – Zaid 2010-11-10 05:55:55

+3

以供参考,避免使用'$ a'和'$ b',请参阅http://perldoc.perl.org/perlvar.html – 2010-11-10 06:46:59

回答

0

他们都是一样的。

匹配运算符。在开始分隔符之前,这是“匹配”运算符。它意味着读取=〜左边的字符串表达式,并查看它的任何部分是否与m后面的分隔符内的表达式匹配。请注意,如果分隔符是斜杠(这是事务的正常状态),那么m是可选的并且通常不包括在内。无论是否存在,它仍然是一个匹配操作。

Source

+1

虽然此链接可能回答问题,但最好包含答案的基本部分并提供参考链接。如果链接页面更改,则仅链接答案可能会失效。 – LaGrandMere 2012-11-13 15:34:37

+0

@LaGrandMere感谢您的信息。我修复了我的答案。你介意不投票吗?谢谢。 – jordanbtucker 2012-11-13 19:47:11

+1

我没有downvote,我只是发表评论,有一个更好的答案为OP ...因为你已经更新了你的答案,我要upvote :) – LaGrandMere 2012-11-14 08:34:07

7

m/PATTERN//PATTERN/是相同的。

请参阅perlop(perl操作员)手册页的this part。向下滚动到m/PATTERN/的部分,您会看到它也被称为/PATTERN/

9

这是一个简写。当您使用分隔符//时,可以省略m。请注意,您还可以使用其它字符分隔,像!,但你需要使用行动:

if ($something =~ m!//this/has/a/ton/of//characters/in/it!) 

通常最好要做到这一点,因为它节省了写\/\/一遍又一遍,你就需要如果你使用//的话。

+5

当选择自己的分隔符时,不要忘记''''和'?'在与'm'一起使用时有特殊的含义。参见[perlop](http://perldoc.perl.org/perlop.html#m/PATTERN/msixpogc)。 – cjm 2010-11-10 10:10:43

相关问题