use strict;
use warnings;
our ($a, $b, $c, $d) = (0, 0, 0, 0); # global variables initialized to undef
sub g1 {
my ($b_param, $c_param) = @_;
print "$a $b_param $c_param $d\n"; }
sub g2 {
my ($a_param, $c_param) = @_;
local $a = $a_param; # dynamic g1($a, $c);
}
sub g3 {
my ($c_param, $a_param) = @_;
g1($a, $b);
{
g2($a, $b);
}
g1($a, $b);
}
sub main {
my ($main_a, $main_b);
$main_a = 4;
$main_b = 5;
$main_a = g3($main_b, $c);
g3($main_b, $main_a); # return value ignored
}
main();
dXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyICgkYSwgJGIsICRjLCAkZCkgPSAoMCwgMCwgMCwgMCk7ICMgZ2xvYmFsIHZhcmlhYmxlcyBpbml0aWFsaXplZCB0byB1bmRlZgoKc3ViIGcxIHsKICAgIG15ICgkYl9wYXJhbSwgJGNfcGFyYW0pID0gQF87CiAgICBwcmludCAiJGEgJGJfcGFyYW0gJGNfcGFyYW0gJGRcbiI7Cn0KCnN1YiBnMiB7CiAgICBteSAoJGFfcGFyYW0sICRjX3BhcmFtKSA9IEBfOwogICAgbG9jYWwgJGEgPSAkYV9wYXJhbTsgICMgZHluYW1pYwogICAgbG9jYWwgJGMgPSAkY19wYXJhbTsKICAgIGcxKCRhLCAkYyk7Cn0KCnN1YiBnMyB7CiAgICBteSAoJGNfcGFyYW0sICRhX3BhcmFtKSA9IEBfOwogICAgbG9jYWwgJGEgPSAkYV9wYXJhbTsKICAgIGxvY2FsICRjID0gJGNfcGFyYW07CiAgICBsb2NhbCAkYiA9IDM7CgogICAgZzEoJGEsICRiKTsKCiAgICB7CiAgICAgICAgbG9jYWwgJGMgPSA4OwogICAgICAgIGxvY2FsICRkID0gNDsKICAgICAgICBnMigkYSwgJGIpOwogICAgfQoKICAgIGcxKCRhLCAkYik7CgogICAgcmV0dXJuICRiOwp9CgpzdWIgbWFpbiB7CiAgICBteSAoJG1haW5fYSwgJG1haW5fYik7CiAgICAkbWFpbl9hID0gNDsKICAgICRtYWluX2IgPSA1OwoKICAgICRtYWluX2EgPSBnMygkbWFpbl9iLCAkYyk7CiAgICBnMygkbWFpbl9iLCAkbWFpbl9hKTsgICMgcmV0dXJuIHZhbHVlIGlnbm9yZWQKfQoKbWFpbigpOwo=