在以下脚本中,为什么要if
计算结果true
以及为什么Has space!
要打印?
p{Space}
是Unicode
财产,对吧?但是$_
不包含 Unicode 语句,而是 ASCII 语句。这个脚本是如何工作的?
#!/usr/bin/perl
use strict;
use warnings;
$_ = "yabba dabba doo";
if(/\p{Space}/){
print "Has space!\n";
}
它被评估为,因为您的字符串中true
有一个空格 ( )。\s
你也可以这样写:
if ( $_ =~ /\s/ ) { .. }
关键是它不检查整个字符串。当您想检查整个字符串是否为空格时,您应该编写如下内容:
if ( $_ =~ /^\s+$/ ) { .. }
或使用 Unicode:
if ( $_ =~ /^\p{PosixSpace}$/ ) { .. }
在您的情况下,您不使用 ASCII 范围,而是使用 POSIX 范围以及PosixSpace
. 它也是不区分大小写的,这使得原始空间成为您的空间;)
同义词列表位于可通过 \p{} 和 \P{} 访问的属性中(查看第 3239 点)。POSIX 字符类列表及其 Unicode 和 Perl 等价物(第三块对您来说很有趣)在Character classes中。
也许您想使用\p{PerlSpace}。