我刚开始使用Perl,并且我得到了一个我不太了解的脚本。具体来说,我不明白这个条件行:
if ( -d "$dirPath\\$file" and not $file =~ /^\./ )
条件的第一部分是文件是否存在于目录中,但我不明白“not $ file =〜/^。/”,这是什么意思? 我通过互联网进行了一些研究,但却找不到任何东西。
答案 0 :(得分:3)
=~
是Perl的正则表达式运算符
它将$file
与正则表达式^\.
简单地说这意味着
^
- 匹配字符串的开头\.
- 搜索文字。字符因此:如果文件名不以a开头,那么使用not
运算符也会否定此表达式。然后这个表达式将返回true。
更多信息here
答案 1 :(得分:3)
该语句的not $file =~ /^\./
部分测试标量$file
中的字符串与正则表达式^\.
正则表达式检查^
开头的字符串,然后是.
点(句点)必须使用反引号\
进行转义,因为正则表达式中的点具有特殊含义(它表示任何单个字符)。
因此它将检查$file
内的字符串是否以点开头。如果匹配则此操作将返回1,如果不匹配则返回0,not
否定它。结果可以读作“如果文件不以点开头”。
您还可以使用!~
运算符(与正则表达式运算符不匹配)来实现相同的结果:
if ( -d "$dirPath\\$file" and $file !~ /^\./ )
要在答案中链接一些ThisSuitIsNotBlack条评论,匹配运算符=~
会记录在perl文档页面perlop中,可以使用perldoc perlop
进行查看,并且可以在线查找Perl website。相关部分为Binding Operators。 Perl Regex有几个perl文档页面perlretut(perldoc perlretut
)和perlre(perldoc perlre
)。