in reply to Generating a range of Unicode characters
Check out perlop Auto-increment and Auto-decrement for an explanation.
The thing to consider here is that the .. range operator leverages the semantics provided by ++ (auto-increment). The documentation for auto-increment says this:
The auto-increment operator has a little extra builtin magic to it. If you increment a variable that is numeric, or that has ever been used in a numeric context, you get a normal increment. If, however, the variable has been used in only string contexts since it was set, and has a value that is not the empty string and matches the pattern /^a-zA-Z*0-9*\z/ , the increment is done as a string, preserving each character within its range, with carry:
print ++($foo = "99"); # prints "100" print ++($foo = "a0"); # prints "a1" print ++($foo = "Az"); # prints "Ba" print ++($foo = "zz"); # prints "aaa"
The components of the range you are trying to construct do not meet the criteria for Perl's built-in autoincrement behavior.
However, if you're using Perl 5.26 or newer, and enable unicode_strings you can use the following, as documented in perlop Range Operators.
use charnames "greek"; my @greek_small = map { chr } (ord("\N{alpha}") .. ord("\N{omega}"));
Or forgo the \N{charname} lookups and just use the actual ordinal values:
my @chars = map {chr} $ord_first .. $ord_last;
Dave
|
|---|