anaboe.net

Ausgabe aller definierten Variablen eines Scripts mit ihrem Wert

Zielstellung

Sie möchten an einer beliebigen Stelle in einem Script wissen, welche Variablen definiert sind und welchen Wert sie haben.

Perl - Code

use strict;
use diagnostics;
use CGI::Carp qw(fatalsToBrowser);

package Test;

our $var1 = "foo";
our @var2 = (1, 2);
sub testsub { return 1; }

package main;

no strict "refs";

print "Content-type: Text/plain\n\n";

foreach $wert (keys %Test::) {
  if( ${"Test::$wert"} ne '' ) {
    print scalar($wert) . " = " . ${"Test::$wert"} . "\n";
  }
  else {
    print scalar($wert) . " has no scalar value\n";
  }
}

Erläuterungen

Alle innerhalb eines Namensraumes definierten Symbole (Variablen, Funktionen usw.) werden in einer Symboltabelle gespeichert. Auf diese erhält man über den Hash %packagename:: Zugriff. Der Namensraum des aktuellen Scripts ohne weitere Besonderheiten heißt main, auf seine Symboltabelle greift man also mittels %main:: oder in diesem speziellen Fall auch kürzer %:: zu.

Bitte beachten Sie, dass mittels my deklarierte lokale Variablen nicht in der Symboltabelle des Packages gespeichert werden, sondern blockbezogen in sog. Scratchpads, auf die Sie nach der oben gezeigten Methode keinen Zugriff haben!

Das Beispielscript enthält einen eigenen Namensraum ("Package") namens Test, in dem ein Skalar, ein Array und eine Subroutine deklariert sind. Im Hauptscript werden diese Symbole aufgelistet und ihr Wert ausgegeben, soweit es sich um einen skalaren Wert handelt. Zur Ausgabe wird eine symbolische Referenz verwendet.

Eine komfortable Alternative zu obigem Codebeispiel stellt das CPAN-Modul Devel::Symdump dar.