sub DoTask1 { my ($object, @arguments) = @_; if (! $object->TaskIsDone() ) { $object->SetupTaskOne(); } if (! @arguments ) { @arguments = qw(ARG1 ARG2 ARG3); } return $object->CommonTask(@arguments); } sub DoTask2 { my ($object, @arguments) = @_; if (! $object->TaskIsDone() ) { $object->SetupTaskTwo(); } if (! @arguments ) { @arguments = qw(ARG6 ARG2 ARG1 ARG5); } return $object->CommonTask(@arguments); } # (...) sub DoTask10 { my ($object, @arguments) = @_; if (! $object->TaskIsDone() ) { $object->DoTask(); $object->DoSomeMoreSetup(); } if (! @arguments) { @arguments = qw(ARG3 ARG5 ARG7); } return $object->CommonTask(@arguments); }