【问题标题】:What does "$file =~ /^\./" mean in perl?perl 中的“$file =~ /^\./”是什么意思?
【发布时间】:2016-08-22 15:08:20
【问题描述】:

我刚刚开始使用 Perl,并且收到了一个我不完全理解的脚本。具体来说,我不明白这个条件行:

if ( -d "$dirPath\\$file" and not $file =~ /^\./ )

条件的第一部分是目录中是否存在文件,但是我不明白“not $file =~ /^./”是什么意思? 我通过互联网做了一些研究,但找不到任何东西。

【问题讨论】:

  • 检查变量内容是否以点开头。如果它包含一个文件名,它会检查它是否是一个隐藏文件。
  • -d 检查文件是否为目录perldoc.perl.org/functions/-X.html
  • 你没有用谷歌搜索“等号波浪线插入符号反斜线点斜线吗?” ;) Perl 的许多运算符和内置变量很难用 google 搜索,因为它们包含特殊字符,因此有助于了解在官方文档中的位置。运算符记录在perlop; (=~here=~ 之后的匹配运算符是 here)。
  • ^\. 是一个正则表达式,记录在perlretutperlre 中。如果您的系统上安装了 perldoc 实用程序,您可以通过输入例如perldoc perlretut 在命令行上。
  • @ThisSuitIsBlackNot 我已将您的 cmets 添加到已接受的答案中,以供将来参考(我知道不是每个人都愿意阅读 cmets)。

标签: perl conditional-statements


【解决方案1】:

该语句的not $file =~ /^\./ 部分针对正则表达式^\. 测试标量$file 中的字符串

正则表达式检查^ 是否以字符串开头,后跟.

点(句点)必须用反引号 \ 转义,因为在正则表达式中点具有特殊含义(表示任何单个字符)。

所以它会检查$file 中的字符串是否以点开头。如果匹配,此操作将返回 1,如果不匹配,则返回 0,并且 not 否定它。结果可以理解为“如果文件不以点开头”。

您也可以使用!~ 运算符(不匹配正则表达式运算符)来达到相同的结果:

if ( -d "$dirPath\\$file" and $file !~ /^\./ )

要在答案中链接一些ThisSuitIsNotBlack cmets,匹配运算符=~ 记录在perl 文档页面perlop 中,可以使用perldoc perlop 查看,也可以在Perl website 在线找到。相关部分是Binding Operators。 Perl Regex 有几个 perl 文档页面 perlretut (perldoc perlretut) 和 perlre (perldoc perlre)。

【讨论】:

    【解决方案2】:

    =~ 是 Perl 的正则表达式操作符

    它匹配$file 到正则表达式^\.

    这意味着

    • ^ - 匹配字符串的开头
    • \. - 搜索文字。人物

    因此:如果文件名不以 .字符,则此表达式将返回 true。

    更多信息here

    【讨论】:

      猜你喜欢
      • 2018-03-05
      • 2010-12-28
      • 2023-03-21
      • 2023-03-25
      • 2020-05-21
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 2017-08-27
      相关资源
      最近更新 更多