in reply to Inspect the members of a Posix Character Class

A concept is valid in Perl only if it can be shown to work in one line.
-- Inline::C::Cookbook

perl -MUnicode::UCD=prop_invlist -MString::Range::Expand=expand_expr - +MList::Util=pairmap -E 'say join(",", sort map {chr} expand_expr(join +(",", pairmap{"[$a-".($b-1)."]"} prop_invlist("PosixAlpha"))))' A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i, +j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z

This isn't better than other solutions here, nor well golfed. It's just for fun.

I did want to show what code led to this one liner, though, as it shows some of the tricks we can derive from CPAN:

use strict; use warnings; use Unicode::UCD qw(prop_invlist); use String::Range::Expand qw(expand_expr); use List::Util qw(pairmap); my @invlist = prop_invlist('PosixAlpha'); my $to_expand = join(',', pairmap {"[$a-" . ($b-1) . ']'} @invlist); my @chars = sort map {chr $_} expand_expr($to_expand); print join(',', @chars), "\n";

This produces the same output as above.

The only tricky part is that prop_invlist returns a list in the notation represented by [$a..$z), or in other words the start to one past the end. Consequently we need to pass $b-1 to expand_expr.