| #!/usr/local/bin/perl |
| # |
| # $Id: ucmsort,v 2.2 2006/05/03 18:24:10 dankogai Exp $ |
| # |
| use strict; |
| my @lines; |
| my ($head, $tail); |
| while (<>){ |
| unless (m/^<U/o){ |
| unless(@lines){ |
| $head .= $_; |
| }else{ |
| $tail .= $_; |
| } |
| next; |
| } |
| chomp; |
| my @words = split; |
| my $u = shift @words; |
| $u =~ s/^<U//o; $u =~ s/>.*//o; |
| push @lines,[ $u, @words ]; |
| } |
| |
| print $head; |
| for (sort { |
| hex($a->[0]) <=> hex($b->[0]) # Unicode descending order |
| or $a->[2] cmp $b->[2] # fallback descending order |
| or $a->[1] cmp $b->[1] # Encoding descending order |
| } |
| @lines) { |
| my $u = shift @$_; |
| print join(" " => "<U$u>", @$_), "\n"; |
| } |
| print $tail; |
| __END__ |