Este es el código:¿Por qué obtengo un error de sintaxis cuando paso un coderef a esta subrutina de Perl prototipada?
sub function($&) {
my $param1 = shift;
my $code = shift;
# do something with $param1 and $code
}
Si trato de llamarlo así:
function("whatever") {
print "i'm inside the coderef\n";
}
consigo Not enough arguments for MyPackage::function at x.pl line 5, near ""whatever" { "
. ¿Cómo puedo llamarlo sin tener que agregar sub
al frente del bloque de código?
¿por qué no funciona cuando es el primer argumento? – Geo
@Geo, puede funcionar, pero debe ser más explícito: 'function (" whatever ", sub {print" I'm within the coderef \ n "});' La sintaxis 'name BLOCK EXPR' solo funciona si el coderef es lo primero. – friedo
Solo porque fue diseñado de esa manera. Sospecho que la razón principal para permitirlo en primer lugar fue permitir a los usuarios escribir subrutinas que pueden llamarse funciones integradas que toman un pequeño fragmento de código como map y grep, pero cualquier cosa más flexible podría confundir rápidamente. – Sean