{ my $cd = join '', <>; my $ch_ptr = 0; sub get_char { exit if $ch_ptr == length $cd; substr $cd, $ch_ptr++, 1; } sub jump_ahead { $ch_ptr = index $cd, ']', $ch_ptr } sub jump_behind { $ch_ptr = rindex $cd, '[', $ch_ptr } } my @cell; my $cl_ptr = 0; my %disp = ( '+' => sub { $cell[$cl_ptr]++ }, '-' => sub { $cell[$cl_ptr]-- }, '.' => sub { print chr($cell[$cl_ptr]) }, '>' => sub { $cl_ptr++ }, '<' => sub { $cl_ptr-- }, ',' => sub { $cell[$cl_ptr] = ord( getc() ) }, '[' => sub { jump_ahead() if $cell[$cl_ptr] == 0 }, ']' => sub { jump_behind() if $cell[$cl_ptr] != 0 }, ); ($disp{get_char()} or sub{})->() while 1;