Until recently, I didn't think this was possible in Ruby short of using an anonymous hash and parsing the hash in the 'initialize' method. However, Guy Decoux recently provided this idiom:
attributes.each do |k, v|
sm = SomeMod.new(name=>'Dan',rank=>'SrA')
puts sm.rank #=> 'SrA'
sm.rank = 'General'
puts sm.rank #=> 'General'
Not only does this let you do named arguments with Ruby, it automatically provides get/set ability. Will Perl 6 be able to do this, hmmm?
The only downside is that you'll have to manually parse out any bogus attributes a programmer might try and create.