The following equivalences to Unicode \p{} constructs and equivalent
backslash character classes (if available), will hold:
[:...:] \p{...} backslash
alpha IsAlpha
alnum IsAlnum
ascii IsASCII
blank IsSpace
cntrl IsCntrl
digit IsDigit \d
graph IsGraph
lower IsLower
print IsPrint
punct IsPunct
space IsSpace
IsSpacePerl \s
upper IsUpper
word IsWord
xdigit IsXDigit
For example "[:lower:]" and "\p{IsLower}" are equivalent.
####
#!/usr/bin/perl
use strict;
use warnings;
$|++;
my %classes= qw/
alpha IsAlpha
alnum IsAlnum
ascii IsASCII
blank IsBlank
cntrl IsCntrl
digit IsDigit
graph IsGraph
lower IsLower
print IsPrint
punct IsPunct
space IsSpace
upper IsUpper
word IsWord
xdigit IsXDigit
/;
for( keys %classes )
{
my( $r_posix, $r_unicode )= ( qr/[[:$_:]]/, qr/\p{$classes{$_}}/ );
print "testing $r_posix and $r_unicode$/";
for my $x (0x00..0x7e)
{
local $_= chr $x;
printf "0x%x (%3d.) differ$/" => $x, $x
if /$r_posix/ xor /$r_unicode/;
}
}
__END__
testing (?-xism:[[:digit:]]) and (?-xism:\p{IsDigit})
testing (?-xism:[[:upper:]]) and (?-xism:\p{IsUpper})
testing (?-xism:[[:xdigit:]]) and (?-xism:\p{IsXDigit})
testing (?-xism:[[:cntrl:]]) and (?-xism:\p{IsCntrl})
testing (?-xism:[[:alnum:]]) and (?-xism:\p{IsAlnum})
testing (?-xism:[[:space:]]) and (?-xism:\p{IsSpace})
testing (?-xism:[[:print:]]) and (?-xism:\p{IsPrint})
testing (?-xism:[[:ascii:]]) and (?-xism:\p{IsASCII})
testing (?-xism:[[:word:]]) and (?-xism:\p{IsWord})
testing (?-xism:[[:alpha:]]) and (?-xism:\p{IsAlpha})
testing (?-xism:[[:punct:]]) and (?-xism:\p{IsPunct})
0x24 ( 36.) differ
0x2b ( 43.) differ
0x3c ( 60.) differ
0x3d ( 61.) differ
0x3e ( 62.) differ
0x5e ( 94.) differ
0x60 ( 96.) differ
0x7c (124.) differ
0x7e (126.) differ
testing (?-xism:[[:lower:]]) and (?-xism:\p{IsLower})
testing (?-xism:[[:blank:]]) and (?-xism:\p{IsBlank})
testing (?-xism:[[:graph:]]) and (?-xism:\p{IsGraph})