Hi Paul et al.,

In an iterator class I've written, I have this method:

sub do {
    my ($self, $code) = @_;
    while (local $_ = $self->next) {
        return unless $code->($_);
    }
}

I've written tests for when the code reference returns true and when it returns false. However, Devel::Cover can't tell. It thinks I've missed the C<unless $code->($_)> part.

http://dev.kineticode.com/bricolage2/coverage/blib-lib-Bricolage-Util- Iterator-pm--branch.html

Only if I change the method to this:

sub do {
    my ($self, $code) = @_;
    while (local $_ = $self->next) {
        my $ret = $code->($_);
        return unless $ret;
    }
}

can Devel::Cover tell that the unless expression is covered. Since I don't want to really create an extra variable to store and check a value just to make Devel::Cover see it, is there a way that Devel::Cover could learn to see it, or that I could assure Devel::Cover that, yes, it really is covered?

Thanks!

David



Reply via email to