CPAN: Grafik mit GnuPlot und Perl in HTML-Seiten

Beitrag lesen

Du kommst komplett ohne solche furchtbaren Hacks wie Frames und benannten Dateien aus. Benutze einfach ein einzelnes Dokument mit selbstadressiertem Formular und Bildausgabe.

  
use IPC::Run qw(run);  
use Plack::Request qw();  
use URI qw();  
use autodie qw(:all run);  
  
my $plotheader = <<'PLOTHEADER';  
set term png size 600, 400  
plot '-'  
PLOTHEADER  
  
my $template = <<'HTML';  
<!DOCTYPE html>  
<html><head><title>Gnuplot-Demo</title>  
<style>textarea { display: block; width: 5em; height: 10em; }</style>  
</head><body>  
<form action="%s">  
<textarea name="plot">  
1 1  
2 4  
3 9  
4 16  
5 25  
</textarea>  
<input type="submit">  
</form>  
%s  
</body></html>  
HTML  
  
my $app = sub {  
    my ($env) = @_;  
    my $req = Plack::Request->new($env);  
    my $in = $req->param('plot');  
    my $img = q();  
    if ($in) {  
        $in = $plotheader . $in;  
        my $out;  
        run ['gnuplot'], \$in, \$out;  
        my $u = URI->new('data:');  
        $u->media_type('image/png');  
        $u->data($out);  
        $img = qq(<img src="$u" alt="">);  
    };  
    my $res = $req->new_response(  
        200,  
        [Content_Type => 'text/html'],  
        [sprintf $template, $req->uri, $img]  
    );  
    $res->finalize;  
};