#!/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})