PHPのおべんきょー用対話環境ほしい。

PHPよくわからんで、対話環境とか欲しーなあ思ったけど見あたらんかった。なのででっちあげた。こんな動作。

% phpterm.pl
php> $x = "hoge";
php> $y = $x . "\n";
php> echo $y;
hoge
php> 

ただ毎回php -r inputやってるだけ。超てきとう、どころじゃないぐらいてきとう。

php> echo "hoge\n";
hoge
php> echo "fuga\n";
hoge
fuga
php> list
echo "hoge\n";
echo "fuga\n";

php> clear
php> list

php> 

こんなことなるし。入力されてるプログラムを出力するコマンドlist、プログラムをリセットするコマンドclearとかだけ適当に仕込む。ソースはPerlで以下。Term::ReadLineべんりだった。

#!/usr/bin/perl -w

use strict;
use Term::ReadLine;

my $term = new Term::ReadLine 'PHP Terminal Modoki';
my $prompt = "php> ";
my $OUT = $term->OUT || \*STDOUT;

my @phpcmd = ("php","-r");
my $phpsrc = "";

my %funtable;

$funtable{"clear"} =  sub{$phpsrc = "";};
$funtable{"list"} =  sub{print $OUT "$phpsrc\n";};
$funtable{"help"} = sub{print"$_" for keys %funtable;};

while(defined(my $line = $term->readline($prompt))){
  chomp $line;
  if(exists($funtable{$line})){
    $funtable{$line}();
  }
  elsif($line =~ /\S/){
    $phpsrc .= $line . "\n";
    (system @phpcmd, $phpsrc) == 0 or exit 1;
  }
  $term->addhistory($line) if $line =~ /\S/;
}

つーかPHPで書いたほがマトモなん書けそう。って、そのPHPがわからんからREPL欲しいんだった。

test