Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: stuck with a \N{CHAR NAME} problem

by ikegami (Patriarch)
on May 26, 2011 at 16:02 UTC ( [id://906855]=note: print w/replies, xml ) Need Help??


in reply to stuck with a \N{CHAR NAME} problem

{ use charnames ":alias" => { FOO => 0x2660 }; my $pat1 = '\N{FOO}'; $re1 = qr/$pat1/; } { use charnames ":alias" => { FOO => 0x2661 }; my $pat2 = '\N{FOO}'; $re2 = qr/$pat2/; } { use charnames ":alias" => { FOO => 0x2662 }; /$re1$re2/ }

What should the pattern match? Probably /\N{U+2660}\N{U+2661}/, but the information is not available to qr// at run-time, much less to the m// operator that's not in scope of the relevant directives.

Those problems were resolved by converting \N{NAME} to \N{U+NUM} at compile-time, and throwing an error when presented with \N{NAME} at run-time.

"\N{NAME}" works. qr/\N{NAME}/ works. Others, not so much.

Replies are listed 'Best First'.
Re^2: stuck with a \N{CHAR NAME} problem
by tchrist (Pilgrim) on May 26, 2011 at 17:52 UTC
    Alias games aside, I have yet to read any argument for why \N{NAME} should not simply use the currently active charmap, and/or autoload the :full one. This would handle all but the rarest sitatuations, and it would make Perl stop violating the principle of least surprise. In other words, instead of generating an exception like
    Constant(\N{NAME}) unknown: (possibly a missing "use charnames ...")
    It should in that situation implicitly do a
    use charnames ":full";
    and get on with it. In other words, if you need a charmap and don't have one, just load what everybody is expecting.

      Auto-loading :full would be most desireable, but it wouldn't help here.

      It seems to me the OP's issue could be resolved by attaching charnames data to statements (just like strict flags). Then, qr// could translate \N{NAME} to \N{U+NUM} at run-time just like it does at compile-time. That would even handle aliases. Is that hard to do?

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others examining the Monastery: (7)
As of 2024-04-19 07:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found