<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">

use strict;
use Graph::Easy;
my $graph = Graph::Easy-&gt;new();



our @NAMES;
BEGIN{
	@NAMES = qw/
Start Hashbang Expecting Between
In_expression Heredoc 
Need_quote Quoted Modifiable Comment
Pod End Error Endable 
/;
	eval "sub $_(){'$_'}}" for @NAMES,qw/
newline pod_primitive pod_terminator end_marker
right_curly here_specifier quote bin_op 
podtext token error whitespace bracket_mismatch
semicomon here_terminator here_text quotingtoken quotedtext modifier
/
};

$graph-&gt;add_node($_) for @NAMES;

# START
$graph-&gt;add_edge(Start, Between);
$graph-&gt;add_edge(Start, Hashbang);

#HASHBANG
$graph-&gt;add_edge(Hashbang, Between);

# Between expressions
$graph-&gt;add_edge(Between,Error)-&gt;set_attributes({color =&gt; 'red'});
$graph-&gt;add_edge(Between,End) -&gt;set_attributes({color =&gt; 'blue'});
$graph-&gt;add_edge(Between,Endable);
$graph-&gt;add_edge(Between,In_expression);

# POD
$graph-&gt;add_edge(Between, Pod, pod_primitive);
$graph-&gt;add_edge(Pod, Between, pod_terminator);
$graph-&gt;add_edge(Pod, Pod, podtext);
$graph-&gt;add_edge(Pod, End, 'eof')-&gt;set_attributes({color =&gt; 'blue'});
$graph-&gt;add_edge(Pod, Error, 'eof')-&gt;set_attributes({color =&gt; 'red'});

# MESH COMMENTS
$graph-&gt;add_edge(Expecting, Comment);
$graph-&gt;add_edge(Between, Comment);
$graph-&gt;add_edge(In_expression, Comment);
$graph-&gt;add_edge(Endable, Comment);

$graph-&gt;add_edge(Comment, Between);
$graph-&gt;add_edge(Comment, In_expression);
$graph-&gt;add_edge(Comment, Endable);

# EXPRESSIONS
$graph-&gt;add_edge(Between, Between);

$graph-&gt;add_edge(In_expression, Endable);
$graph-&gt;add_edge(In_expression, In_expression, token);
$graph-&gt;add_edge(In_expression, In_expression, whitespace);
$graph-&gt;add_edge(In_expression, Error)-&gt;set_attributes({color =&gt; 'red'});

$graph-&gt;add_edge(Endable, Between);
$graph-&gt;add_edge(Endable, Endable);
$graph-&gt;add_edge(Endable, Error, token)-&gt;set_attributes({color =&gt; 'red'});
$graph-&gt;add_edge(Endable, In_expression);

# HEREDOC
$graph-&gt;add_edge(Between, Expecting, here_specifier);
$graph-&gt;add_edge(Endable, Expecting, here_specifier);
$graph-&gt;add_edge(In_expression, Expecting, here_specifier);
$graph-&gt;add_edge(Expecting, Expecting, whitespace);
$graph-&gt;add_edge(Expecting, Expecting, token);
$graph-&gt;add_edge(Expecting, Expecting, here_specifier);
$graph-&gt;add_edge(Expecting,Heredoc, newline);
$graph-&gt;add_edge(Heredoc,Heredoc, here_text);
$graph-&gt;add_edge(Heredoc,Endable, here_terminator);
$graph-&gt;add_edge(Heredoc,Heredoc, here_terminator);
$graph-&gt;add_edge(Heredoc,In_expression, here_terminator);

# QUOTELIKE
$graph-&gt;add_edge(Between, Need_quote, quotingtoken);
$graph-&gt;add_edge(Endable, Need_quote, quotingtoken);
$graph-&gt;add_edge(Expecting, Need_quote, quotingtoken);
$graph-&gt;add_edge(In_expression, Need_quote, quotingtoken);

$graph-&gt;add_edge(Between, Quoted);
$graph-&gt;add_edge(Endable, Quoted);
$graph-&gt;add_edge(Expecting, Quoted);
$graph-&gt;add_edge(In_expression, Quoted);

$graph-&gt;add_edge(Quoted, Need_quote);
$graph-&gt;add_edge(Need_quote, Quoted);
$graph-&gt;add_edge(Need_quote, Error)-&gt;set_attributes({color =&gt; 'red'});
$graph-&gt;add_edge(Quoted, Quoted, quotedtext);
$graph-&gt;add_edge(Quoted, In_expression, quote);
$graph-&gt;add_edge(Quoted, Error, quote)-&gt;set_attributes({color =&gt; 'red'});
$graph-&gt;add_edge(Quoted, Endable, quote);
$graph-&gt;add_edge(Quoted, Expecting, quote);
$graph-&gt;add_edge(Quoted, Modifiable, quote);
$graph-&gt;add_edge(Modifiable, Modifiable, modifier);
$graph-&gt;add_edge(Modifiable, Error)-&gt;set_attributes({color =&gt; 'red'});
$graph-&gt;add_edge(Modifiable, Expecting);
$graph-&gt;add_edge(Modifiable, In_expression);
$graph-&gt;add_edge(Modifiable, Endable);

#END OF FILE
$graph-&gt;add_edge(Expecting,Error, 'eof')-&gt;set_attributes({color =&gt; 'red'});
$graph-&gt;add_edge(Heredoc,Error, 'eof')-&gt;set_attributes({color =&gt; 'red'});
$graph-&gt;add_edge(Between, End, 'eof') -&gt;set_attributes({color =&gt; 'blue'});
$graph-&gt;add_edge(Between, End, end_marker) -&gt;set_attributes({color =&gt; 'blue'});
 $graph-&gt;add_edge(Endable, End, 'eof') -&gt;set_attributes({color =&gt; 'blue'});
$graph-&gt;add_edge(Endable, End, end_marker) -&gt;set_attributes({color =&gt; 'blue'});
$graph-&gt;add_edge(Between, Error, end_marker)-&gt;set_attributes({color =&gt; 'red'});
$graph-&gt;add_edge(Between, Error, 'eof')-&gt;set_attributes({color =&gt; 'red'});
$graph-&gt;add_edge(Endable, Error, end_marker)-&gt;set_attributes({color =&gt; 'red'});
$graph-&gt;add_edge(Endable, Error, 'eof')-&gt;set_attributes({color =&gt; 'red'});

print $graph-&gt;as_graphviz;

=pod

question - does pod running off the bottom have to close?
answer: no.
</pre></body></html>