The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::ExampleCode - Führe Beispielcode aus

BASE CLASS

Quiq::Hash

SYNOPSIS

(1) Code $code ausführen und den Code selbst und sein Resultat nach STDOUT schreiben. Das Resultat (Skalar- oder List-Kontext) wird direkt zurückgeliefert.

  my $exa = Quiq::ExampleCode->new;
  $res|@res = $exa->execute($code,-variables=>\@keyval);
  ...

(2) Code $code ausführen und den Code selbst und sein Resultat in Form eines Objektes zurückliefern. Die Ausgabe auf STDOUT unterbleibt.

  my $exa = Quiq::ExampleCode->new(
      -objectReturn => 1,
      -verbose => 0,
  );

Ausführung im Skalar-Kontext:

  $obj = $exa->execute($code,-variables=>\@keyval);
  my $code = $obj->code;
  my $res = $obj->result;
  ...

Im List-Kontext:

  $obj = $exa->execute($code,-variables=>\@keyval,-listContext=>1);
  my $code = $obj->code;
  my $resA = $obj->result;
  ...

DESCRIPTION

Die Klasse dient zum Ausführen von Beispielcode in Perl. Beispielcode ist dadurch gekennzeichnet, dass der Code und sein Resultat gegenüber gestellt werden.

EXAMPLES

Setzen von Variablen

Variable vorab setzen:

  $exa->setVariable(
      ffm => $ffm,
  );
  my $cmd = $exa->execute(q|
      $ffm->videoToImages('video.mp4','img',
          -aspectRatio => '4:3',
          -framestep => 6,
          -start => 3,
          -stop => 10,
      );
  |);

Variable per Option -variables bei Aufruf setzen:

  my $cmd = $exa->execute(q|
      $ffm->videoToImages('video.mp4','img',
          -aspectRatio => '4:3',
          -framestep => 6,
          -start => 3,
          -stop => 10,
      );|,
      -variables => [
          ffm => $ffm,
      ],
  );

oder (in anderer Reihenfolge):

  my $cmd = $exa->execute(
      -variables => [
          ffm => $ffm,
      ],q|
          $ffm->videoToImages('video.mp4','img',
              -aspectRatio => '4:3',
              -framestep => 6,
              -start => 3,
              -stop => 10,
          );
      |,
  );

METHODS

Konstruktor

new() - Erzeuge Instanz

Synopsis

  $exa = $class->new(@opt);

Options

-fileHandle => $fh (Default: \*STDOUT)

FileHandle, über die Informationen über die ausgeführten Beispiele ausgegeben wird.

-objectReturn => $bool (Default: 0)

Liefere bei Aufruf von $exa->execute() nicht den Wert des Beispielcode, sondern ein Objekt, das den Beispielcode und den Wert enthält.

-verbose => $bool (Default: 1)

Gib Informationen über die ausgeführten Beispiele auf der FileHandle -fileHandle aus.

Description

Instantiiere ein Example-Objekt und liefere eine Referenz auf dieses Objekt zurück.

Variablen setzen

setVariable() - Setze Variable für Beispielcode-Ausführung

Synopsis

  $exa->setVariable(@keyVal);

Description

Setze Variable, so dass die folgende Kommando-Ausführung (Methode execute()) im Kontext der Klasse Quiq::ExampleCode ausgeführt werden kann. Die Methode liefert keinen Wert zurück.

Anstelle mittels dieser Methode, können die Variablen auch beim Aufruf selbst mit der Option -variables angegeben werden.

Example

  $exa->setVariable(
      obj => $obj,
      x => $x,
      y => $y,
  );

Beispielcode ausführen

execute() - Führe Beispielcode aus

Synopsis

  $res|@res = $exa->execute($code,@opt);

Options

-asStringCallback => $subRef (Default: undef)

Subroutine-Referenz, die das Resultat des Beispiel-Code in eine Stringrepräsentation wandelt, die auf dem Bildschirm ausgegeben werden kann.

-listContext => $bool (Default: Wert von wantarray)

Führe den Beispiel-Code im List-Kontext aus. Eine explizite Setzung ist nur im Falle von -objectReturn=>1 nötig

-objectReturn => $bool (Default: 0)

Liefere bei Aufruf von $exa->execute() nicht den Wert des Beispielcode, sondern ein Objekt, das den Beispielcode und den Wert enthält.

-variables => \@keyVal (Default: [])

Setze die angegebenen Variablen im Ausführungskontext des Beispiel-Code.

-verbose => $bool (Default: Konstruktor-Setzung)

Gib Informationen über die ausgeführten Beispiele auf der FileHandle -fileHandle aus.

Description

Führe Beispielcode $code aus und liefere das Resultat der Ausführung $res (Skalar-Kontext) oder @res (Listen-Kontext) zurück.

Ist beim Konstruktor die Option -verbose gesetzt worde, wird zusätzlich der Beispielcode und das Resultat ausgegeben.

Example

Der Aufruf

  $cmd = $exa->execute(q|
      $ffm->videoToImages('video.mp4','img',
          -aspectRatio => '4:3',
          -framestep => 6,
          -start => 3,
          -stop => 10,
      );
  |);

führt zu der Ausgabe

  $ffm->videoToImages('video.mp4','img',
      -aspectRatio => '4:3',
      -framestep => 6,
      -start => 3,
      -stop => 10,
  );
  =>
  ffmpeg -y -loglevel error -stats -i 'video.mp4'
      -vf 'framestep=6,crop=ih/3*4:ih'
      -ss 3 -t 7 -qscale:v 2 'img/%06d.jpg'

Der Text nach '=>' ist der gelieferte Wert $cmd.

VERSION

1.164

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2019 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.