The following code illustrates the difference between my and local. Note that if a variable is declared local inside a function, then any function calls inside that function will have access to this local variable provided these other functions does not further localize the variable.
---------------------------------------------
EXAMPLE CODE
---------------------------------------------
sub set_x_to_0{
  $x = 0;
}

sub set_my_x_to_1{
  my $x = 1;
  &set_x_to_0;
  print "Result of set_my_x_to_1 is $x";
}

sub set_local_x_to_2{
  local $x = 2;
  &set_x_to_0;
  print "Result of set_local_x_to_2 is $x";
}

&set_my_x_to_1;
&set_local_x_to_2;

---------------------------------------------
RESULT OF EXECUTION OF ABOVE CODE
---------------------------------------------
Result of set_my_x_to_1 is 1
Result of set_local_x_to_2 is 0