The difference between my and local

#!/usr/local/bin/perl
#I am purposely not using strict and -w so that I can use undeclared variables

fun1();
fun2();
fun3("Called from the main program");

sub fun1 {
    my $first = 25;
    fun3("Called from fun1");
    return;
}

sub fun2 {
    local $first = 50;
    fun3("Called from fun2");
    return;
}

sub fun3() {
    my ($msg) = @_;
    print "$msg: ";
    if (defined $first) {
	print "first is $first\n";
    } else {
	print "first is undefined\n";
    }
    return;
}