A small table of cases can check the same behavior for several inputs.

Table Cases

table_cases.pl
use strict;
use warnings;

sub multiply {
    my ($value, $factor) = @_;
    return $value * $factor;
}

my $factor = ;
my @inputs = (1, 2, 3);
my @expected = (2, 4, 6);
my $passed = 0;
my $failed = 0;

foreach my $index (0 .. 2) {
    my $actual = multiply($inputs[$index], $factor);
    if ($actual == $expected[$index]) {
        $passed = $passed + 1;
    } else {
        $failed = $failed + 1;
    }
}

print "factor=$factor\n";
print "passed=$passed\n";
print "failed=$failed\n";
use strict;
use warnings;

sub multiply {
    my ($value, $factor) = @_;
    return $value * $factor;
}

my $factor = ;
my @inputs = (1, 2, 3);
my @expected = (2, 4, 6);
my $passed = 0;
my $failed = 0;

foreach my $index (0 .. 2) {
    my $actual = multiply($inputs[$index], $factor);
    if ($actual == $expected[$index]) {
        $passed = $passed + 1;
    } else {
        $failed = $failed + 1;
    }
}

print "factor=$factor\n";
print "passed=$passed\n";
print "failed=$failed\n";
use strict;
use warnings;

sub multiply {
    my ($value, $factor) = @_;
    return $value * $factor;
}

my $factor = ;
my @inputs = (1, 2, 3);
my @expected = (2, 4, 6);
my $passed = 0;
my $failed = 0;

foreach my $index (0 .. 2) {
    my $actual = multiply($inputs[$index], $factor);
    if ($actual == $expected[$index]) {
        $passed = $passed + 1;
    } else {
        $failed = $failed + 1;
    }
}

print "factor=$factor\n";
print "passed=$passed\n";
print "failed=$failed\n";
table test A table test repeats the same check for each row of input and expected output.