#!/usr/bin/perl my %data = (); my %code = (); my @out = (); my $fn = $ARGV[0]; while (<>) { push(@out, $_); /^\s*exports/i and last; } while (<>) { my $key; $arr = /\sDATA\s*$/o ? \%data : \%code; $_ =~ s/^\s+//; my $key = (split(' ', $_))[0]; substr($key, 0, 1) = '' while $key =~ /^_/o; chomp $key; $arr->{$key}->{$_} = 1; } for my $k (sort keys %data) { push(@out, sort {$b cmp $a} keys %{$data{$k}}); } for my $k (sort keys %code) { push(@out, sort {$b cmp $a} keys %{$code{$k}}); } open(R, '>', $fn); print R @out; close R;