The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

PNI::Node - is a basic unit of code

SYNOPSIS

    # Define "Foo::Bar" node.
    # in file PNI/Node/Foo/Bar.pm

    package PNI::Node::Foo::Bar;
    use PNI::Node::Mo;
    extends 'PNI::Node';

    sub BUILD {
        my $self = shift;

        # Decorate node, add an input and an output.
        $self->in('lead');
        $self->out('gold');

    }

    sub task {
        my $self = shift;

        my $in  = $self->in('lead');
        my $out = $self->out('gold');

        # Turn lead into gold.
        ...

          $out->data( $in->data );

    }

    1;

    # Somewhere else in your code.

    # Create a "Foo::Bar" node.
    use PNI::Node;
    my $node = PNI::Node->new( type => 'Foo::Bar' );

    my $in  = $node->in('lead');
    my $out = $node->out('gold');

    # Fill input data.
    $in->data('1Kg');

    # Produce something.
    $node->task;

    # Get output data.
    my $gold = $out->data;

ATTRIBUTES

ins

    my @ins = $node->ins->list;

Holds a PNI::Set of <PNI::In>.

label

outs

    my @outs = $node->outs->list;

Holds a PNI::Set of <PNI::Out>.

type

METHODS

by_id

    use PNI::Node;

    my $node = PNI::Node::by_id($node_id);

Given a node id, returns a reference to the node.

get_ins_edges

    my @ins_edges = $node->get_ins_edges;

Returns a list of all PNI::Edge connected to node ins.

get_outs_edges

    my @outs_edges = $node->get_outs_edges;

Returns a list of all PNI::Edge connected to node outs.

in

    $node->in('input_name');

Creates an input by the given name if such input does not exists.

    my $in = $node->in('input_name');

Returns a PNI::In object.

    $node->in->data(1);
    say $node->in->data;

Default input name is 'in', so you can be lazy.

    $node->in(1);
    $node->in('in1'); # idem

If you pass digit x as input_name, it will be replaced by inx.

is_on

    $node->task if $node->is_on;

off

    $node->off;

Turn off a node if something is wrong.

    sub task {
        my $self = shift;

        # if "in" is not defined, return and turn off the node.
        $self->in->is_defined or return $self->off;
    }

on

out

    $node->out('output_name');

Creates an output by the given name if such output does not exists.

    my $out = $node->out('output_name');

Returns a PNI::Out object.

    $node->out->data(1);
    say $node->out->data;

Default output name is 'out', so you can be lazy.

    $node->out(1);
    $node->out('out1'); # ditto

If you pass digit x as output_name, it will be replaced by outx.

task

    $node->task;

This is an abstract method that must be implemented by every class that extends PNI::Node. It is the chunk of code that the node implements.

to_hashref

    my $node_hashref = $node->to_hashref;

Returns an hash ref representing the node.