#!/usr/bin/perl

while ( <> ) {
   $fn = 1 if /^\@footnote:/;
   if ( $fn ) {
     ( s/^\[(\d+)\] (.*)// ) && ( $footer->{ $fn_hash->{ $1 } } = sprintf "%s", $2 ) || print;
  } else {
     while ( s/^(.*?)\[(\d+)\]//x ) {
        printf "%s[%s]", $1, $fn_hash->{ $2 } ||= ++$index;
     }
     print;
  }
}

foreach ( sort keys %$footer ) {
  printf "[%s] %s\n", $_, $footer->{ $_ };
}