Das einfache Skript
$Job->{Sub} = sub { join "_", @_ };
$Job->{Args} = [1,2,3];
print &{$Job->{'Sub'}}(@{$Job->{'Args'}}); # print $Job->{'Sub'}; ergibt CODE(0x1234567)
funktioniert wie erwartet. Vielleicht wird print irgendwo ueberladen und macht Schweinereien? Geht es, wenn du den Sub-Aufruf seperat in einen String schreibst und diesen ausgibst?