An update to looking at the symbol table

In the chapter “Symbol Tables and Typeglobs”, I show some tricks to look at the symbol table to see which variables are there. I ended the chapter with a short example of Package::Stash, but in updating an answer to the Stackoverflow questions [How can I list all variables that are in a given scope?](https://stackoverflow.com/a/79771517/2766176), I came up with a better example, and one that does a better job of handling variable names that

use v5.12;

package Local {
	my $package = 'Local::';

	our $foo;
	our @bar;
	}

vars_in( 'main' );
vars_in( 'Local' );

sub vars_in {
	state $rc = require Package::Stash;
	my( $package ) = @_;

	my $stash = Package::Stash->new($package);

	my @list = $stash->list_all_symbols;

	say $package;
	foreach my $symbol ( sort @list ) {
		next if $symbol =~ /::\z/;
		(my $printable_symbol = $symbol) =~ s/([\x00-\x1F\x7F])/control_char_to_str($1)/ge;
		say "  $printable_symbol";

		foreach my $sigil ( qw($ @ % &), '' ) {
			my $var = "$sigil$symbol";
			(my $printable_var = $var) =~ s/([\x00-\x1F\x7F])/control_char_to_str($1)/ge;
			say "    has $printable_var" if $stash->has_symbol($var);
			}
		}
	}

sub control_char_to_str {
    my $char = shift;
    my $ord = ord($char);
    return '^?' if $ord == 127;  # DEL
    return '^' . chr($ord + 64);
    }