The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#!/usr/bin/perl
# Learning RPerl, Section 4.5: Subroutine Variables, Variable Scope & Persistence
# [[[ PREPROCESSOR ]]]
# <<< PARSE_ERROR: "ERROR ECOPARP00" >>>
# <<< PARSE_ERROR: "Unexpected Token: 'state'" >>>
# [[[ HEADER ]]]
use RPerl;
use strict;
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
use feature 'state'; ## no critic qw(Capitalization ProhibitMultiplePackages ProhibitReusedNames) # SYSTEM DEFAULT 3: allow multiple & lower case package names
# [[[ SUBROUTINES ]]]
#print 'before defining quux(), have $local_persistent = ', $local_persistent, "\n"; # YES ERROR
sub quux {
{ my void $RETURN_TYPE };
state integer $local_persistent = 23;
print 'inside quux(), have $local_persistent = ', $local_persistent, "\n"; # NO ERROR
$local_persistent++;
return;
}
#print 'after defining quux(), have $local_persistent = ', $local_persistent, "\n"; # YES ERROR
# [[[ OPERATIONS ]]]
quux();
#print 'after calling quux(), have $local_persistent = ', $local_persistent, "\n"; # YES ERROR
quux();
#print 'after calling quux(), have $local_persistent = ', $local_persistent, "\n"; # YES ERROR