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