On Sat, Apr 1, 2017 at 4:24 AM, K. Peng <k.p...@att.net> wrote: > I don't know why the "ref" and "scalar" functions here can be used to > validate if it's ASCII or UTF8 encoding. > > > use constant ASCII => ref eval { > require Encode; > Encode::find_encoding('ascii'); > }; > > use constant UTF8 => scalar eval { > Encode::encode_utf8( chr(182) ) eq pack( 'H*', 'C2B6' ); > }; >
Not entirely clear but the constant ASCII will have a value of "Encode::XS" if 'ascii' is found as a valid encoding and UTF8 will have the value "1" if the utf8 encoding of "chr 182" matches the "Hex string (high nibble first) of "C2B6" - appears to be the paragraph char. use constant ASCII => ref eval { require Encode; Encode::find_encoding('ascii'); }; print "r: ", eval { Encode::find_encoding('ascii'); }, "\n"; print "r: ", ref eval { Encode::find_encoding('ascii'); }, "\n"; print "r: ", ref Encode::find_encoding('ascii') , "\n"; print "r: ", ref Encode::find_encoding('himom') , "\n"; use constant UTF8 => scalar eval { Encode::encode_utf8( chr(182) ) eq pack( 'H*', 'C2B6' ); }; print "s: ", eval { Encode::encode_utf8( chr(182) ) eq pack( 'H*', 'C2B6' ); }, "\n"; print "s: ", scalar eval { Encode::encode_utf8( chr(182) ) eq pack( 'H*', 'C2B6' ); }, "\n"; print "s: ", Encode::encode_utf8( chr(182) ) eq pack( 'H*', 'C2B6' ) , "\n"; printf("c: %c %s\n", chr(182), pack( 'H*', 'C2B6' ) ); $ perl /tmp/r.pl r: Encode::XS=SCALAR(0xb39ff0) r: Encode::XS r: Encode::XS r: s: 1 s: 1 s: 1 c: ΒΆ -- a Andy Bach, afb...@gmail.com 608 658-1890 cell 608 261-5738 wk