#!/usr/bin/perl
use strict;
use warnings;
########################################
# global variables – all start at 0
our ($a, $b, $c, $d) = (0, 0, 0, 0);
########################################
sub g1 { # void g1(int b, int c)
local ($b, $c) = @_; # dynamically-scoped parameters print "$a $b $c $d\n"; # prints global a & d, local b & c }
sub g2 { # void g2(int a, int c)
local ($a, $c) = @_; # re-bind a and c dynamically g1($a, $c); # call g1(a,c)
}
sub g3 { # int g3(int c, int a)
local ($c, $a) = @_; # parameter order: (c , a) local $b = 3; # int b = 3; g1($a, $b); # g1(a,b);
{ # begin nested block
local $d = 4; # int d = 4; local $c = 8; # int c = 8; g2($a, $b); # g2(a,b);
} # d and c revert here
g1($a, $b); # g1(a,b);
}
sub main {
$a = 4;
$b = 5;
$a = g3($b, $c); # a = g3(b,c); (c is still 0)
g3($b, $a); # g3(b,a); // return value ignored
}
main();
IyEvdXNyL2Jpbi9wZXJsCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBnbG9iYWwgdmFyaWFibGVzIOKAkyBhbGwgc3RhcnQgYXQgMApvdXIgKCRhLCAkYiwgJGMsICRkKSA9ICgwLCAwLCAwLCAwKTsKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKc3ViIGcxIHsgICAgICAgICAgICAgICAgICAgICAjIHZvaWQgZzEoaW50IGIsIGludCBjKQogICAgbG9jYWwgKCRiLCAkYykgPSBAXzsgICAgICMgZHluYW1pY2FsbHktc2NvcGVkIHBhcmFtZXRlcnMKICAgIHByaW50ICIkYSAkYiAkYyAkZFxuIjsgICAjIHByaW50cyBnbG9iYWwgYSAmIGQsIGxvY2FsIGIgJiBjCn0KCnN1YiBnMiB7ICAgICAgICAgICAgICAgICAgICAgIyB2b2lkIGcyKGludCBhLCBpbnQgYykKICAgIGxvY2FsICgkYSwgJGMpID0gQF87ICAgICAjIHJlLWJpbmQgYSBhbmQgYyBkeW5hbWljYWxseQogICAgZzEoJGEsICRjKTsgICAgICAgICAgICAgICMgY2FsbCBnMShhLGMpCn0KCnN1YiBnMyB7ICAgICAgICAgICAgICAgICAgICAgIyBpbnQgZzMoaW50IGMsIGludCBhKQogICAgbG9jYWwgKCRjLCAkYSkgPSBAXzsgICAgICMgcGFyYW1ldGVyIG9yZGVyOiAoYyAsIGEpCiAgICBsb2NhbCAkYiA9IDM7ICAgICAgICAgICAgIyBpbnQgYiA9IDM7CiAgICBnMSgkYSwgJGIpOyAgICAgICAgICAgICAgIyBnMShhLGIpOwoKICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAjIGJlZ2luIG5lc3RlZCBibG9jawogICAgICAgIGxvY2FsICRkID0gNDsgICAgICAgICMgaW50IGQgPSA0OwogICAgICAgIGxvY2FsICRjID0gODsgICAgICAgICMgaW50IGMgPSA4OwogICAgICAgIGcyKCRhLCAkYik7ICAgICAgICAgICMgZzIoYSxiKTsKICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAjIGQgYW5kIGMgcmV2ZXJ0IGhlcmUKCiAgICBnMSgkYSwgJGIpOyAgICAgICAgICAgICAgIyBnMShhLGIpOwogICAgcmV0dXJuICRiOyAgICAgICAgICAgICAgICMgcmV0dXJuIGI7Cn0KCnN1YiBtYWluIHsKICAgIGxvY2FsICRhOyAgICAgICAgICAgICAgICAjIGludCBhOwogICAgbG9jYWwgJGI7ICAgICAgICAgICAgICAgICMgaW50IGI7CiAgICAkYSA9IDQ7CiAgICAkYiA9IDU7CiAgICAkYSA9IGczKCRiLCAkYyk7ICAgICAgICAgIyBhID0gZzMoYixjKTsgICAoYyBpcyBzdGlsbCAwKQogICAgZzMoJGIsICRhKTsgICAgICAgICAgICAgICMgZzMoYixhKTsgIC8vIHJldHVybiB2YWx1ZSBpZ25vcmVkCn0KCm1haW4oKTsK