Provided by: pdl_2.080-3_amd64 bug

NAME

       PDL::Demos - PDL demo infrastructure

SYNOPSIS

         # in a demo, if text-orientated
         package PDL::Demos::Blah;
         sub info { ('blah', 'Longer description of demo') }
         sub init { 'use PDL::Graphics::PGPLOT;' }
         my @demo = (
           [comment => "Welcome to the Blah demo"],
           [act => <<'EOF'],
         output "PDL can make n-dimensional sequences:\n";
         output $x = sequence(2,3);
         EOF
         );
         sub demo { @demo }
         sub done { "# return things to previous state\n" }

         # a GUI-orientated one
         package PDL::Demos::GUIBlah;
         use GUIBlah; # so demo won't show up in list if GUIBlah not installed
         sub info { ('blahgui', 'GUIBlah demo') }
         sub demo {[actnw => q|
           # starting up the GUI demo app
           |.__PACKAGE__.q|::run();
         |]}
         sub run { # this is just a convention, but a good one
           # ...
         }

         # iterate a demo of your own module - call it PDL::Demos::(something)
         make && perl -Mblib -S perldl # run "demo" and it will see your demo

         # in a CLI or REPL
         use PDL::Demos;
         sub demo {
           if (!$_[0]) {
             require List::Util;
             my @kw = sort grep $_ ne 'pdl', PDL::Demos->keywords;
             my $maxlen = List::Util::max(map length, @kw);
             print "Use:\n";
             printf "   demo %-${maxlen}s # %s\n", @$_[0,1] for map [PDL::Demos->info($_)], 'pdl', @kw;
             return;
           }
           no strict;
           PDL::Demos->init($_[0]);
           $_->[0]->($_->[1]) for PDL::Demos->demo($_[0]);
           PDL::Demos->done($_[0]);
         }

DESCRIPTION

       Provides utilities to make demos for PDL modules.

METHODS

   list
       Class method; goes through @INC finding all modules starting with "PDL::Demos::" (with up
       to two "::"-separated words). Cached after first run. Does not distinguish demo modules
       that did not load.

   keywords
       Returns the list of keywords (first element of "info" return-list) of all found modules
       that loaded successfully and implement an "info" method. Caches results.

   info
       Given a keyword, returns the result of calling "info" on the relevant module plus the
       module name (three elements) or throws exception if unknown keyword.

   init
       Given a keyword, "eval"s the result of calling "init" on the relevant module if it has
       one, or throws exception if unknown keyword.

   demo
       Given a keyword, returns the result of calling "demo" on the relevant module or throws
       exception if unknown keyword.

   done
       Given a keyword, "eval"s the result of calling "done" on the relevant module if it has
       one, or throws exception if unknown keyword.

DEMO MODULE METHODS

       Each demo module must provide these class methods:

       info
           Return a two-element list: a single keyword (probably lower-case), and a short
           description of the demo.

       demo
           Returns a list of array-refs of two elements: a function provided by this module, and
           an argument for it.

       init
           Return a string which will be evaluated in the package running the demo. Use this for
           "use" statements that import functions needed in your demo.

FUNCTIONS

       These are all exported.

   comment
       Prints its argument, prompts user to press enter before returning.

   output
       Prints its argument (best for use in "actnw" etc).

   actnw
       Prints its argument with a separator, then evaluates it as Perl code with "PDL" loaded.
       Doesn't prompt, so use this for e.g. GUI demos that return when the user tells them to.

   act
       As above, but prompts before returning.

AUTHOR

       Copyright (C) 1998 Tuomas J. Lukka.  Tweaks by Ed J for PDL 2.077, 2022.