Here's what wasn't so cheap:
sub usage {
warn "Usage: 0ドル [+folder] [sequence [OP [msglist]]]
OPs are:\n";
my %syn;
for my $k (keys %canonical) {
push @{$syn{$canonical{$k}}}, $k;
}
for my $op (sort keys %syn) {
warn join " ", "", "", sort(@{$syn{$op}}), "\n";
}
exit 1;
}
Typical output:
Usage: /home/mjd/bin/mark [+folder] [sequence [OP [msglist]]]
OPs are: = assign c copy set 0 del delete x - d diff difference w without * a and i intersect intersection ? p print s show + add o or u union
I wonder if this was really necessary?