6 my @map = map { chomp; [ split // ] } <>;
8 my $xmax = @{ $map[0] };
13 if ($map[0][$_] eq '|') {
19 my $dir = 2; # 0 up, 1 right, 2 down, 3 left
23 my $now = $map[$y][$x];
24 say "at $x,$y: '$now'";
25 if ($now =~ /[A-Z]/) {
27 } elsif ($now eq '+') {
29 $ndir = 0 if $map[$y-1][$x] ne ' ' && $dir != 2;
30 $ndir = 1 if $map[$y][$x+1] ne ' ' && $dir != 3;
31 $ndir = 2 if $map[$y+1][$x] ne ' ' && $dir != 0;
32 $ndir = 3 if $map[$y][$x-1] ne ' ' && $dir != 1;
44 last if $x < 0 || $y < 0 || $x > $xmax || $y > $ymax || $map[$y][$x] eq ' ';