#!/usr/bin/perl -w use strict; use Language::Basic; use Term::ReadLine; my $program = Language::Basic::Program->new(); my $prompt = '> '; my $term = Term::ReadLine->new('BASIC interpreter'); my $OUT = $term->OUT || *STDOUT; select $OUT; # Really, there should be a way to do this without assuming # that Basic only prints to the selected handle print $OUT "Language::Basic interpreter with ", $term->ReadLine(), " support\n"; while ( defined (my $line = $term->readline($prompt)) ) { $term->addhistory($line) if $line =~ /\S/; if ($line =~ /^\s*\d+\s+/) { $program->line($line); } elsif ($line =~ /^\s*RUN\s*$/i) { $program->implement; } elsif ($line =~ /^\s*QUIT\s*$/i) { print $OUT "Bye!\n"; exit; } else { print $OUT "Invalid command; try RUN, QUIT, or defining a statement with a number.\n"; } }