#!/usr/bin/perl

# Learning RPerl, Section 4.5: Subroutine Variables, Variable Scope & Persistence

# [[[ PREPROCESSOR ]]]
# <<< PARSE_ERROR: 'ERROR ECOPAPL02' >>>
# <<< PARSE_ERROR: 'Global symbol "$autovivified" requires explicit package name' >>>

# [[[ HEADER ]]]
use RPerl;
#use strict;
use warnings;
our $VERSION = 0.001_000;

# [[[ CRITICS ]]]
## no critic qw(ProhibitUselessNoCritic ProhibitMagicNumbers RequireCheckedSyscalls)  # USER DEFAULT 1: allow numeric values & print operator
## no critic qw(RequireInterpolationOfMetachars)  # USER DEFAULT 2: allow single-quoted control characters & sigils

# [[[ SUBROUTINES ]]]
print 'before defining quux(), have $autovivified = ', $autovivified, "\n";  # NO ERROR
sub quux {
    { my void $RETURN_TYPE };
    $autovivified = 23;
    print 'inside          quux(), have $autovivified = ', $autovivified, "\n";       # NO ERROR
    $autovivified++;
    return;
}
print 'after  defining quux(), have $autovivified = ', $autovivified, "\n";  # NO ERROR

# [[[ OPERATIONS ]]]
quux();
print 'after   calling quux(), have $autovivified = ', $autovivified, "\n";  # NO ERROR
quux();
print 'after   calling quux(), have $autovivified = ', $autovivified, "\n";  # NO ERROR