— |
#!/usr/bin/perl
my %first ;
my %last ;
unshift @ARGV , splice @ARGV , 1 , 1 if $o { '~' } ;
open my $FH , '<' , shift @ARGV ;
$SIG { INT } = sub { close $FH ; exit 130 } ;
while ( < $FH > ) {
chomp ;
$first { $_ } //= $. ;
$last { $_ } = $. unless $o {f} ;
}
close $FH ;
while ( <> ) {
chomp ;
if ( exists $first { $_ } ) {
delete $first { $_ }
}
elsif ( $o { '+' } ) {
$first { $_ } = "+$." ;
}
}
unless ( $o { ':' } )
{
for ( sort keys %first ) {
print "$_\n" ;
}
}
else
{
for ( sort { $first { $a } <=> $first { $b } } keys %first ) {
my $prefix = do { ! exists $last { $_ } || $o {1} && $first { $_ } eq $last { $_ } ? "$first{$_}" : "$first{$_}-$last{$_}" } ;
print "$prefix:\t$_\n" ;
}
}
sub VERSION_MESSAGE {}
sub HELP_MESSAGE {
$ARGV [1] //= '' ;
open my $FH , '<' , $0 ;
while (< $FH >){
s/\$0/ $Script /g ;
print $_ if s/^=head1// .. s/^=cut// and $ARGV [1] =~ /^o(p(t(i(o(ns?)?)?)?)?)?$/i ? m/^\s+\-/ : 1;
}
close $FH ;
exit 0 ;
}
|