use v6; my $fn = $*PROGRAM_NAME; my $file = open($fn) err die "Can't read file '$fn': $!"; my %braces = ( '(' => ')', '{' => '}', '[' => ']', ); my @stack; for =$file -> my $line { for ($line.comb(m/<[()\[\]\{\}]>/)) -> my $match { if %braces{$match} { # öffnende Klammer gefunden push @stack, ~$match; } else { # schliessende Klammer gefunden my $expected = %braces{pop @stack}; if $expected ne $match { die "File '$fn' is not balanced: expected '" ~ $expected ~ "', found '$match'\n"; } } } } $file.close; if @stack.elems == 0 { say "File $fn is balanced"; } else { say "File $fn is not balanced, more opening braces than closing ones"; }