You could declare the variable in a scope that includes the 2 functions:
{ my $myvar
sub foo{
$myvar = "Hello";
}
sub foo1{
my $myvar1 = $myvar;
}
}
That is not really elegant though, and can be hard to maintain, as it is not clear in foo1
where the value of $myvar
was set. It is probably better to pass the variable as an argument.
sub foo {
my $myvar = "Hello";
return $myvar;
}
sub foo1 {
my( $myvar)= @_;
my $myvar1 = $myvar;
}
# calling code
my $myvar= foo();
foo1( $myvar);
Note that all 3 $myvar
are different variables, in different scopes.
As a side note, using prototypes (sub foo()
) is probably not a good idea, unless you really know what they are doing, which is likely not to be the case ( see The problem with prototypes for a discussion on prototypes)