sub _do { my ($self,%arg) = @_; unless(%arg){ # some stuff (~200 lines) foreach my $choice (@array_choices){ # log update my @choice_array = split(",",$print_hash{$choice}); my $pick; ($choice_array[0] eq 'correct') ? ($pick = "$choice_array[1]-$choice_array[2]") : ($pick = $choice_array[1]); # pick for correction $self->_do($choice_array[0] => $pick); # repete undo precedure with defined values ($choice_array[0] eq 'correct') ? (delete $class_log{do}[$hash_order{$choice_array[0]}]) : (delete $class_log{do}[$hash_order{$print_hash{$choice}}]); # delete do choice push(@return_log,"_do($choice_array[0] => $choice_array[1]);") unless (ref $pick eq 'ARRAY'); # data for physh push(@return_log,"_do($choice_array[0] => \[$choice_array[1],$choice_array[2]\]);") if (ref $pick eq 'ARRAY');# data for physh } } else{ # brute _do } }