Как использовать $a и $b в подпрограмме Perl

Я хотел бы использовать переменные $a и $b в моих анонимных бинарных функциях, как это сделано в sort {$a <=> $b} (1, 2, 3), но я не могу понять, почему код типа

#!/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";
    }
}    

не работает. В то время как

#!/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";
    }
}

работает нормально.

Что я делаю не так?

10
задан Egga Hartung 3 January 2012 в 14:14
поделиться