Here's my solution.  Finally, something that even a newb like me can
write a solution for (albeit, maybe not a great one).  My solution
feels very perl-ish to me, but, hey, it seems to work with the limited
testing I've given it.

--

  -- AL --

#!/usr/bin/env ruby

if ! ARGV[0]
  puts "Usage: munge.rb filename.txt"
else
  infile = File.open(ARGV[0])
  infile.map do |line|
    line.split.map do |word|
      if word =~ /\W$/
        punctuation = word[-1..-1]
        word.chop!
      else
        punctuation = ""
      end
      if word.length > 3
        inner = word[1...-1]
        word = word[0..0] + inner.split(//).sort_by {rand}.join('') +
word[-1..-1] + punctuation
      end
      print word + " "
    end
    puts
  end
end