Advertisement
Guest User

PerlBFinterprer.pl

a guest
Jan 11th, 2013
23
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 0.86 KB | None | 0 0
  1. #!/usr/bin/env perl -w
  2.  
  3. use common::sense;
  4. use autodie;
  5.  
  6. my $p = 0;
  7. my $lim = 5000;
  8. my @a = (1..$lim);
  9. my @loop;
  10. my $s = 0;
  11.  
  12. for my $cnt (1..$lim){
  13.     $a[$cnt] = 0;
  14. }
  15.  
  16. open my $bf, "<", $ARGV[0];
  17. my @data = split //, <$bf>;
  18.  
  19. foreach my $i (@data){
  20.     given ($i){
  21.         when ($i eq '+') {$a[$p] = -1 if ($a[$p] == 255); $a[$p]++;}
  22.         when ($i eq '-') {$a[$p] = 256 if ($a[$p] == 0); $a[$p]--;}
  23.         when ($i eq '>') {$p = -1 if ($p == $lim); $p++;}
  24.         when ($i eq '<') {$p = $lim + 1 if ($p == 0); $p--;}
  25.         when ($i eq ','){
  26.             $a[$p] = getchar();
  27.         }
  28.         when ($i eq '.'){
  29.             print chr $a[$p];
  30.         }
  31.         when ($i eq "[") {
  32.             push (@loop, $s);
  33.         }
  34.         when ($i eq "]") {
  35.             if ($a[$p] != 0) {
  36.                 $s = $loop[scalar(@loop) - 1];
  37.             }
  38.             else {
  39.                 pop @loop;
  40.             }
  41.         }
  42.     }  
  43. }
  44. print "\n";
  45.  
  46. sub getchar{
  47.     sysread STDIN, my $buf, 1;
  48.     return (ord($buf));
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement