在以下脚本中,为什么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";
}
答案 0 :(得分:0)
它被评估为true
,因为你的字符串中有一个空格(\s
)。你也可以这样写:
if ( $_ =~ /\s/ ) { .. }
重点是它不会检查整个字符串。当你想检查整个字符串是否一个空格时,你应该写下这样的内容:
if ( $_ =~ /^\s+$/ ) { .. }
或使用Unicode:
if ( $_ =~ /^\p{PosixSpace}$/ ) { .. }
在您的情况下,您不使用ASCII范围,您使用POSIX范围以及PosixSpace
的同义词。它也不区分大小写,这使得原始空间适合您的空间;)
同义词列表位于 Properties accessible through \p{} and \P{} (请参阅第3239点)。 POSIX字符类及其Unicode和Perl等价物列表(第三个块对您有意义)在 Character classes 中。
也许您想使用\p{PerlSpace}。