+
+{
+ is SCOPE, 1, 'block : scope';
+ is SCOPE(0), 1, 'block : scope 0';
+ is SCOPE(1), 0, 'block : scope 1';
+ is CALLER, 0, 'block: caller';
+ is CALLER(0), 0, 'block : caller 0';
+ is CALLER(1), 0, 'block : caller 1';
+ sub {
+ is SCOPE, 2, 'block sub : scope';
+ is SCOPE(0), 2, 'block sub : scope 0';
+ is SCOPE(1), 1, 'block sub : scope 1';
+ is CALLER, 2, 'block sub : caller';
+ is CALLER(0), 2, 'block sub : caller 0';
+ is CALLER(1), 0, 'block sub : caller 1';
+ for (1) {
+ is SCOPE, 3, 'block sub for : scope';
+ is SCOPE(0), 3, 'block sub for : scope 0';
+ is SCOPE(1), 2, 'block sub for : scope 1';
+ is CALLER, 2, 'block sub for : caller';
+ is CALLER(0), 2, 'block sub for : caller 0';
+ is CALLER(1), 0, 'block sub for : caller 1';
+ eval {
+ is SCOPE, 4, 'block sub for eval : scope';
+ is SCOPE(0), 4, 'block sub for eval : scope 0';
+ is SCOPE(1), 3, 'block sub for eval : scope 1';
+ is SCOPE(2), 2, 'block sub for eval : scope 2';
+ is CALLER, 4, 'block sub for eval : caller';
+ is CALLER(0), 4, 'block sub for eval : caller 0';
+ is CALLER(1), 2, 'block sub for eval : caller 1';
+ is CALLER(2), 0, 'block sub for eval : caller 2';
+ }
+ }
+ }->();
+}