在Perl中重新排序字母排序

Tem*_*jin 3 sorting perl alphabetical

我正在尝试修复亚美尼亚字母表中的排序,因为所有标准的Unix工具和编程语言只对两种主要方言中的一种(西方)排序字母和单词.

把它翻译成技术问题就是重新命令其中一个字符" ւ ",把它放在字母之间的不同位置,让我们说它是最后一个字符,以便为顺序方言(东方)正确排序单词.在语言上用东方方言来说,这个" ւ "符号不是"独立的",而是用2个字符" ու " 写的字母的一部分.目前的排序将字母" ու " 置于"ոք"或"ոփ"2字母构造之后.

基本上,如果你想让例如字母"v"代替拉丁字母表中的字母"z",它应该是完全相似的.

我想尝试使用类似的东西

#!/usr/bin/perl -w
use strict;

my (@sortd, @unsortd, $char_u, $char_x);
#@unsortd = qw(????? ????? ??????? ???? ????? ????? ???);
@unsortd = qw(?? ?? ?? ??);

@sortd = sort {
  $char_u = "?";
  $char_x = split(//, @unsortd);
  if ($char_u gt $char_x) {
    1;
  } else {
    return $a cmp $b;
  } 
} @unsortd;

print "@sortd\n";
Run Code Online (Sandbox Code Playgroud)

但这并不是整个单词的缩放,只有2个字母的形式是固定的.

更新:我能够使用tr函数解决这个问题,将字母映射到数字,如Perlmonks所示

Mat*_*Mat 12

如果你还没有这样做,你应该看一下Unicode :: Collat​​e :: Locale模块.

use Unicode::Collate::Locale;

my $collator = Unicode::Collate::Locale->new(locale => "hy");
@sortd = $collator->sort(@unsortd);
print join("\n", @sortd, '');
Run Code Online (Sandbox Code Playgroud)

这打印:

??
??
??
??
Run Code Online (Sandbox Code Playgroud)

(我不确定这是你期望的输出,但是该模块并且Unicode::Collate有很多信息,根据需要创建自定义排序可能更容易,而不是自己编辑.)