fork download
  1. #!/usr/bin/perl -X
  2. use utf8;
  3. use feature 'unicode_strings';
  4.  
  5. # table from kana to readings
  6. %yomitbl = (
  7. 'ァ' => 'ア', 'ィ' => 'イ', 'ゥ' => 'ウ', 'ェ' => 'エ', 'ォ' => 'オ',
  8. 'ガ' => 'カ', 'ギ' => 'キ', 'グ' => 'ク', 'ゲ' => 'ケ', 'ゴ' => 'コ',
  9. 'ザ' => 'サ', 'ジ' => 'シ', 'ズ' => 'ス', 'ゼ' => 'セ', 'ゾ' => 'ソ',
  10. 'ッ' => 'ツ',
  11. 'ダ' => 'タ', 'ヂ' => 'チ', 'ヅ' => 'ツ', 'デ' => 'テ', 'ド' => 'ト',
  12. 'バ' => 'ハ', 'ビ' => 'ヒ', 'ベ' => 'ヘ', 'ブ' => 'フ', 'ボ' => 'ホ',
  13. 'パ' => 'ハ', 'ピ' => 'ヒ', 'プ' => 'フ', 'ペ' => 'ヘ', 'ポ' => 'ホ',
  14. 'ャ' => 'ヤ', 'ュ' => 'ユ', 'ョ' => 'ヨ',
  15. 'ヮ' => 'ワ', 'ヰ' => 'イ', 'ヴ' => 'ウ', 'ヱ' => 'エ',
  16. 'ヵ' => 'カ', 'ヶ' => 'カ',
  17.  
  18. 'ァー' => 'アア', 'ィー' => 'イイ', 'ゥー' => 'ウウ', 'ェー' => 'エエ', 'ォー' => 'オオ',
  19. 'アー' => 'アア', 'イー' => 'イイ', 'ウー' => 'ウウ', 'エー' => 'エエ', 'オー' => 'オオ',
  20. 'カー' => 'カア', 'キー' => 'キイ', 'クー' => 'クウ', 'ケー' => 'ケエ', 'コー' => 'コオ',
  21. 'ガー' => 'カア', 'ギー' => 'キイ', 'グー' => 'クウ', 'ゲー' => 'ケエ', 'ゴー' => 'コオ',
  22. 'サー' => 'サア', 'シー' => 'シイ', 'スー' => 'スウ', 'セー' => 'セエ', 'ソー' => 'ソオ',
  23. 'ザー' => 'サア', 'ジー' => 'シイ', 'ズー' => 'スウ', 'ゼー' => 'セエ', 'ゾー' => 'ソオ',
  24. 'ター' => 'タア', 'チー' => 'チイ', 'ツー' => 'ツウ', 'テー' => 'テエ', 'トー' => 'トオ',
  25. 'ダー' => 'タア', 'ヂー' => 'チイ', 'ヅー' => 'ツウ', 'デー' => 'テエ', 'ドー' => 'トオ',
  26. 'ナー' => 'ナア', 'ニー' => 'ニイ', 'ヌー' => 'ヌウ', 'ネー' => 'ネエ', 'ノー' => 'ノオ',
  27. 'ハー' => 'ハア', 'ヒー' => 'ヒイ', 'フー' => 'フウ', 'ヘー' => 'ヘエ', 'ホー' => 'ホオ',
  28. 'バー' => 'ハア', 'ビー' => 'ヒイ', 'ベー' => 'ヘウ', 'ブー' => 'フエ', 'ボー' => 'ホオ',
  29. 'パー' => 'ハア', 'ピー' => 'ヒイ', 'プー' => 'フウ', 'ペー' => 'ヘエ', 'ポー' => 'ホオ',
  30. 'マー' => 'マア', 'ミー' => 'ミイ', 'ムー' => 'ムウ', 'メー' => 'メエ', 'モー' => 'モオ',
  31. 'ャー' => 'ヤア', 'ュー' => 'ユウ', 'ョー' => 'ヨオ',
  32. 'ヤー' => 'ヤア', 'ユー' => 'ユウ', 'ヨー' => 'ヨオ',
  33. 'ラー' => 'ラア', 'リー' => 'リイ', 'ルー' => 'ルウ', 'レー' => 'レエ', 'ロー' => 'ロオ',
  34. 'ヮー' => 'ワア',
  35. 'ワー' => 'ワア', 'ヰー' => 'イイ', 'ヴー' => 'ウウ', 'ヱー' => 'エエ', 'ヲー' => 'ヲオ',
  36. );
  37.  
  38. sub kanacmp {
  39. # convert hiragana to katakana
  40. my($ka, $kb) = ($a, $b);
  41. $ka =~ y/ぁ-ん/ァ-ン/;
  42. $kb =~ y/ぁ-ん/ァ-ン/;
  43.  
  44. # convert katakana to its readings
  45. my($yomia, $yomib) = ($ka, $kb);
  46. $yomia =~ s/[ァ-ヶ]ー?/ exists $yomitbl{$&} ? $yomitbl{$&} : $& /eg;
  47. $yomib =~ s/[ァ-ヶ]ー?/ exists $yomitbl{$&} ? $yomitbl{$&} : $& /eg;
  48.  
  49. # compare a and b in readings, katakanas or original strings
  50. $yomia cmp $yomib or $ka cmp $kb or $a cmp $b
  51. }
  52.  
  53. print "$_\n" for sort kanacmp qw(
  54. がっき
  55. ガレージ
  56. きがん
  57. ふあん
  58. クリーンヒット
  59. ギンガムチェック
  60. きかんしゃ
  61. カレーライス
  62. シークワード
  63. カーキ
  64. ぎんが
  65. ファン
  66. かれい
  67. シークヮーサー
  68. カレー
  69. かぎ
  70. ぎかい
  71. グリーンカレー
  72. ギガ
  73. プアー
  74. がき
  75. カキ
  76. );
Success #stdin #stdout 0.01s 6296KB
stdin
Standard input is empty
stdout
か
が
カーキ
カキ
かぎ
がき
がっき
かれい
カレー
ガレージ
カレーライス
ギガ
ぎかい
きがん
きかんしゃ
ぎんが
ギンガムチェック
グリーンカレー
クリーンヒット
シークヮーサー
シークワード
プアー
ファン
ふあん