Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: Inspect the members of a Posix Character Class

by davido (Cardinal)
on Jul 29, 2021 at 14:26 UTC ( [id://11135491]=note: print w/replies, xml ) Need Help??


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.


Dave

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://11135491]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others scrutinizing the Monastery: (4)
As of 2024-03-28 20:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found