Sie könnten nur eval
die Blöcke
use experimental 'signatures';
use feature 'say';
sub doublethecode ($block1, $block2) { eval { $block1; }; eval { $block2;} } ;
doublethecode \&{ print "OH " }, \&{ say for qw/HAI YOU LOLCAT :-P/ };
Ausgang:
OH, HAI
YOU
LOLCAT
:-P
Dann ignorieren Sie einfach die \&
und Sie sind da.
Ab v5.20
Sie können Signaturen und :prototype
Attribute zusammen verwenden. Die Funktion signatures
bietet eine "häufigere" Syntax und eine minimalistische Art der Argumentprüfung. Vielleicht wird eines der Zukunftsperls ein "eingebautes" (optionales, hochflexibles) System irgendeiner Art dazu haben, aber Prototypen sind so etwas nicht. So etwas wie:
sub doublethecode :prototype(\&\&) ($cr1, $cr2) { $cr1 ; $cr2 ; }
ist nicht, was es scheint. Da Prototypen, signatures
und Signaturen mit :prototype(&&)
du nicht sein kann geben, was denken Sie bekommen, könnte dies gut genug sein:
sub doublethecode { eval { shift }; eval{ shift } } ;
doublethecode &{ print "perl" }, &{ print "6" }
Ausgang:
perl6
Um sicherzustellen, dass Perl doesn‘ t denken {}
ist ein Hash, der &
ist notwendig. Aber eigentlich ... was ist falsch mit anonymen Subroutinen sub { }
hier verwenden?
Sie brauchen nicht wirklich Prototypen verwenden Sie Codereferenzen, Sie können sie einfach als benannte oder unbenannte U-Boote übergeben. – TLP
Was Sie "Blöcke des Codes" nennen, ist genau das, was 'sub {...}' ist, nur geben Sie nicht das 'sub' Schlüsselwort ein – TLP
@TLP: Sie meinen so? 'example2 sub {...}, sub {...};' Ich weiß, dass ich nur auf das Schlüsselwort oder die Variablen 'sub' verzichten möchte. Ich schätze, das kann nicht gemacht werden. – Flimm