A pure function is easier to test because the same input gives the same output.

Pure Functions

pure_functions.pl
use strict;
use warnings;

sub final_price {
    my ($price, $discount) = @_;
    return $price - $discount;
}

my $discount = ;
my $price = 12;
my $actual = final_price($price, $discount);
my $expected = $price - $discount;
my $status = $actual == $expected ? "pass" : "fail";

print "discount=$discount\n";
print "actual=$actual\n";
print "status=$status\n";
use strict;
use warnings;

sub final_price {
    my ($price, $discount) = @_;
    return $price - $discount;
}

my $discount = ;
my $price = 12;
my $actual = final_price($price, $discount);
my $expected = $price - $discount;
my $status = $actual == $expected ? "pass" : "fail";

print "discount=$discount\n";
print "actual=$actual\n";
print "status=$status\n";
use strict;
use warnings;

sub final_price {
    my ($price, $discount) = @_;
    return $price - $discount;
}

my $discount = ;
my $price = 12;
my $actual = final_price($price, $discount);
my $expected = $price - $discount;
my $status = $actual == $expected ? "pass" : "fail";

print "discount=$discount\n";
print "actual=$actual\n";
print "status=$status\n";
pure function A pure function calculates from its arguments without changing outside state.