1

在以下脚本中,为什么要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";
}
4

1 回答 1

0

它被评估为,因为您的字符串中true有一个空格 ( )。\s你也可以这样写:

if ( $_ =~ /\s/ ) { .. }

关键是它不检查整个字符串。当您想检查整个字符串是否为空格时,您应该编写如下内容:

if ( $_ =~ /^\s+$/ ) { .. } 

或使用 Unicode:

if ( $_ =~ /^\p{PosixSpace}$/ ) { .. } 

在您的情况下,您不使用 ASCII 范围,而是使用 POSIX 范围以及PosixSpace. 它也是不区分大小写的,这使得原始空间成为您的空间;)

同义词列表位于可通过 \p{} 和 \P{} 访问的属性中(查看第 3239 点)。POSIX 字符类列表及其 Unicode 和 Perl 等价物(第三块对您来说很有趣)在Character classes中。

也许您想使用\p{PerlSpace}

于 2013-08-06T06:26:54.117 回答