2013/05/16(木)Perl勉強メモ #003 グラフ描く

「Graphviz::DSL」がレポートで活躍しています。

#!/usr/bin/env perl

use strict;
use warnings;
use utf8;
use Graphviz::DSL;
use open IO => qw/:utf8 :std/;

my $graph = graph {
    name 'Miscellaneous Symbols';

    global rankdir => 'LR';

    my $cnt = 0;

    for my $dec ( hex('2600') .. hex('2609') )
    {
        $cnt++;
        my $char = chr $dec;
        node "node${cnt}", shape => 'record', label => "{<p>$char|<n>}";
    }

    while ($cnt > 1)
    {
        edge [ "node" . ($cnt - 1) . ":n" => "node" . $cnt . ":p" ];
        $cnt--;
    }
};

$graph->save(path => 'symbols', type => 'png', encoding => 'utf-8');

だけで以下のグラフが出ます。

symbols

日本語WordNetに使うとかなり面白いグラフが出ます。

graph

こんなんして意味あんのか?と思ってたけど、ログを解析してOSのデッドロック状態をグラフで表したりすると全然わかりやすさが違って驚きました。