Local variables created inside user-defined procedures and user-defined functions, as well as in B4P programs can be made visible as regional variable in the code of user-defined functions called from here. This approach is useful if you want to provide numerous variables to the function, but don't want to create processing overhead for passing them as function parameters, nor using global variables as other side effects cannot be avoided.
define procedure( zoo )
{
echo('Zoo in ', city[], ' ', country[]);
city[] = Cambridge; // city and country are regional variables
country[] = United Kingdom;
echo( " Scope of country[] in 'zoo': ", scope(country[]), " and city[]: ", scope( city[]) );
}
define procedure( bar )
{
country[] = USA; // country is a local variable, but city is not
echo('Bar in ', city[], ' ', country[]);
regional // Alternative formulation
{
zoo;
}
echo('Bar in ', city[], ' ', country[]); // Cambridge, UK
echo( " Scope of country[] in 'bar': ", scope(country[]), " and city[]: ", scope( city[]) );
}
define procedure( foo )
{
city[] = Boston;
regional() bar;
echo('Foo(d) in ', city[]); // Cambridge
}
// Main program
foo;
Bar in Boston USA
Zoo in Boston USA
Scope of country[] in 'zoo': regional and city[]: regional
Bar in Cambridge United Kingdom
Scope of country[] in 'bar': local and city[]: regional
Foo(d) in Cambridge