me gustaría utilizar $a
y $b
las variables en mis funciones binarias anónimos como se hace en sort {$a <=> $b} (1, 2, 3)
pero no puedo entender por qué código como
#!/usr/bin/env perl
use strict;
use warnings;
Foo::Bar(sub { $a + $b });
package Foo;
sub Bar {
my ($function) = @_;
for my $i (1, 2, 3) {
local ($a, $b) = ($i, $i);
print $function->() . "\n";
}
}
No funciona. Mientras que
#!/usr/bin/env perl
use strict;
use warnings;
Foo::Bar(sub { $_ });
package Foo;
sub Bar {
my ($function) = @_;
for my $i (1, 2, 3) {
local $_ = $i;
print $function->() . "\n";
}
}
funciona bien.
¿Qué estoy haciendo mal?
+1. Creo que esta es una práctica extremadamente mala sin embargo. – flesk
en mi humilde opinión, está bien si desea crear una función tipo 'ordenar' que toma un bloque; pero esa función solo debería devolver valores y no 'imprimir', obviamente. Esto está bien como una demostración sin embargo. – friedo
Eso es verdad. Sospecho que el OP no sabe realmente lo que está haciendo, y estaría mejor con 'sub {$ _ [0] + $ _ [1]}' y '$ function -> ($ i, $ i)' . – flesk