Might I suggest printing the variables via "p variable_here" to double check their contents?(Doing this will most certainly prove Modern is correct) Also, @actor.skill_levels looks like it's a static(READ:unchanging) variable. So, why are you continuously storing the same data in it on each function call of "mark"? Shouldn't that be in the initialization function of the Game_Actors class with it set as an attr_reader:
I say Game_Actors because @actor is a common variable name that Enterbrain has associated with the class and you'll see it all through out the status, skill, and equipment windows.
It's your call where you put things but I personally find it easier to define and setup my actor variables in the init. function of Game_Actors. =)