It’s been so long since I’ve programmed in Perl. Twelve years ago, it was my life, but what with the Raspberry Pi intervening, I hadn’t used it in a while. It’s been so long, in fact, that I wasn’t aware of the new language structures available since version 5.14. Perl’s Unicode support has got a lot more robust, and I’m sick of Python’s whining about codecs when processing anything other than ASCII anyway. So I thought I’d combine re-learning some modern Perl with some childish amusement.
What I came up with was a routine to convert ASCII alphanumerics ([0-9A-Za-z]) to Unicode Enclosed Alphanumerics ([⓪-⑨Ⓐ-â“â“-â“©]) for advanced lulz purposes. â’¾ ⓣⓗⓘâ“â“š ⓘⓣ ⓦⓞⓡⓚⓢ â“¡â“ⓣⓗⓔⓡ ⓦⓔⓛⓛ:
#!/usr/bin/perl # annoying.pl - â“‘â“” â“â“â“ⓞⓨⓘâ“â“– ⓦⓘⓣⓗ ⓤâ“ⓘⓒⓞⓓⓔ # created by scruss on 2014-05-18 use v5.14; # fun UTF8 tricks from http://stackoverflow.com/questions/6162484/ use strict; use utf8; use warnings; use charnames qw( :full :short ); sub annoyify; die "usage: $0 ", annoyify('string to print like this'), "\n" if ( $#ARGV < 0 ); say annoyify( join( ' ', @ARGV ) ); exit; # 💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩💩 sub annoyify() { # convert ascii to chars in circles my $str = shift; my @out; foreach ( split( '', $str ) ) { my $c = ord($_); # remember, can be > 127 for UTF8 if ( $c == charnames::vianame("DIGIT ZERO") ) { # 💩💩💩 sigh; this one's real special ... 💩💩💩 $c = charnames::vianame("CIRCLED DIGIT ZERO"); } elsif ($c >= charnames::vianame("DIGIT ONE") && $c <= charnames::vianame("DIGIT NINE") ) { # numerals, 1-9 only (grr) $c = charnames::vianame("CIRCLED DIGIT ONE") + $c - charnames::vianame("DIGIT ONE"); } elsif ($c >= charnames::vianame("LATIN CAPITAL LETTER A") && $c <= charnames::vianame("LATIN CAPITAL LETTER Z") ) { # upper case $c = charnames::vianame("CIRCLED LATIN CAPITAL LETTER A") + $c - charnames::vianame("LATIN CAPITAL LETTER A"); } elsif ($c >= charnames::vianame("LATIN SMALL LETTER A") && $c <= charnames::vianame("LATIN SMALL LETTER Z") ) { # lower case $c = charnames::vianame("CIRCLED LATIN SMALL LETTER A") + $c - charnames::vianame("LATIN SMALL LETTER A"); } else { # pass thru non-ascii chars } push @out, chr($c); } return join( '', @out ); }
Yes, I really did have to do that special case for ⓪; ⓪…⑨ are not contiguous like ASCII 0…9. ⓑⓞⓞ!
Creative Misuse of Unicode Mathematical Alphanumeric Symbols for Advanced Lulz: ð–¢ð–ºð—‡ ð˜†ð—¼ð˜‚ ð˜´ð˜¦ð˜¦ ð™¬ð™ð™–𙩠𓘠ð”¡ð”¦ð”¡ ð•¥ð•™ð•–ð•£ð•–?
Now I find that some of my old code needs ‘-C0’ to run properly ☹