# Graphing Perl

Document Sample

```					  Graphing Perl
Leon Brocard
leon@iterative-software.com
Iterative Software Ltd.
Introduction

"Did you ever see such a thing as a drawing of a
muchness?"
-- Dormouse, Alice in Wonderland

We will cover:
an introduction to graphs and GraphViz
the visualisation of various parts of Perl using directed
graphs
Why?

A picture is worth a thousand words

Spatial memory

Hierarchies are everywhere (i.e. "I can graph that!")
Graphs not charts!

This talk is about graphs not charts!
Example graph
Graphs?

What is a graph?
A collection of nodes linked together with edges

What is a directed graph?
A graph -- but the edges have a direction
How?

GraphViz
automatic graph layout and drawing package from
AT&T
simple text file input
variety of graphing outputs (PostScript, PNG, etc.)
fairly fast (~2 secs)
http://www.graphviz.org/

GraphViz module
on the CPAN
hides the creation of the text file
simple OO interface to producing graphs
all graphs shown here produced using it
Example GraphViz input

use GraphViz;

my \$g = GraphViz->new();

label => ’Far’);

print \$g->as_png;
Example GraphViz output
Data structures

Programs consist of data structures and code.
Data::Dumper can help:
\$VAR1 = [
’red’,
{
’a’ => [
3,
1,
4,
1
],
’b’ => {
’w’ => ’b’,
’q’ => ’a’
}
},
’blue’,
undef
];
Data structures graph

my \$graph = GraphViz::Data::Grapher->new(\@d);
print \$graph->as_png;
Regular expressions

Regexes
a powerful part of Perl
an entirely different mini language
tricky to understand at a glance

Perl regex debugger
use re "debug";
graph regex bytecode
Regular expressions graph

my \$g = GraphViz::Regex->new(’^([abcd0-9]+|foo)’);
print \$g->as_png;
XML

XML
is a buzzword
represents data in a tree
hard for humans to understand
<p>Check out the <a href="/news/">latest news</a>.</p
<p>Under construction!!!</p></body></html>

my \$graph = GraphViz::XML->new(\$xml);
print \$graph->as_png;
XML graph
DBI

DBI
very popular
databases are everywhere
many tables
many fields
complex relationships

GraphViz::DBI (by Marcel Grunauer) graphs tables and
their relations

It guesses: if there is a table called "product" and another
table contains a field called "product_id", then it assumes
the two are related
DBI graph
Subroutine cross-reference

Back to code: How can subroutines in a module call each
other?

B::Xref (by Malcolm Beattie)
hooks into Perl compiler
documents possible call paths
Subroutine cross-reference graph

Remember: possible call paths
Code profiling (line level)

Better than potential code graphs? Code profiling

Devel::SmallProf (by Ted Ashton)
perl-line Perl profiler
modified to produce graphs

Following graph of a program by Greg McCarroll
hot spot is clearly visible
Code profiling (line level) graph
Code profiling (subroutine level)

Line-level profiling useless for large programs

Devel::DProf
subroutine-level profiling
collect call graph information
a little glue
Code profiling (subroutine level)
Modules

How have modules called each other?

... also possible from Devel::DProf
Modules graph
ISA hierarchies

GraphViz::ISA (by Marcel Grunauer) can graph @ISA
hierarchies at run-time

Example from Damian Conway’s "Object Oriented Perl"
CPAN dependencies

ppmgraph (by Marcel Grunauer) can graph CPAN tarball
dependencies
Opcodes

Opcodes
Programs are compiled into parse trees and opcodes,
which the Perl interpreter then follows
These are quite daunting to Perl internals beginners
B::Graph (by Stephen McCamant)

perl -MO=Graph,-dot -e ’\$a = 1; \$b
= 2; print \$a+\$b’
Opcodes graph
Opcodes 2

B::Tree (by Simon Cozens) is simpler:

perl -MO=Tree -e ’\$a = 1; \$b = 2;
print \$a+\$b’
Parse::RecDescent

Parse::RecDescent (by Damian Conway)
powerful recursive descent text parser generator
writing grammars is tricky
visualisation aids understanding and can find bugs

my \$g = GraphViz::Parse::RecDescent->new(\$grammar);
print \$g->as_png;
Parse::RecDescent graph

examples/demo_operator.pl:
The Perl grammar

Stephane Payrard and Francois Desarmenien have tried to
graph the Perl grammar

This describes the components of a Perl script
The Perl grammar graph
Overview and future

Graphing is Good

Graphing Perl is possible and easy (mostly glue)

The GraphViz module is available on the CPAN

What else can we graph?

Large graphs problem: interactive? fish-eye?

... in my Copious Spare Time ;-)

```
DOCUMENT INFO
Shared By:
Categories:
Stats:
 views: 118 posted: 2/1/2010 language: English pages: 35
How are you planning on using Docstoc?