use feature state; sub alternatecase { my $str = shift; sub alternate { state $c = 1; return ($c = !$c); } $str =~ s/(\w)/alternate() ? uc($1) : lc($1)/ge; return $str; }