use strict;
use warnings;

call_a_caller();

sub call_a_caller
  {
  shortinfo();
  longinfo();
  }

sub shortinfo 
  {
  my ($Package, $Datei, $Zeile) = caller();
  print "Kurze Info:\n";
  print "Package: $Package\n" if (defined $Package);
  print "Datei:   $Datei\n"   if (defined $Datei);
  print "Zeile:   $Zeile\n\n" if (defined $Zeile);
  return 1;
  }

sub longinfo 
  {
   my ($Package, $Datei, $Zeile, $Subr, 
       $HasArgs, $WantArray, $EvalText, $IsRequire) = caller(1);
  print "Lange Info:\n";
  print "Package:   $Package\n"   if (defined $Package);
  print "Datei:     $Datei\n"     if (defined $Datei);
  print "Zeile:     $Zeile\n"     if (defined $Zeile);
  print "Funkt.:    $Subr\n"      if (defined $Subr);
  print "HasArgs:   $HasArgs\n"   if (defined $HasArgs);
  print "WantArray: $WantArray\n" if (defined $WantArray);
  print "EvalText:  $EvalText\n"  if (defined $EvalText);
  print "IsRequire: $IsRequire\n" if (defined $IsRequire);
  return 2;
  }
\end{listing}

Das Programm erzeugt folgende Ausgabe:

\begin{listing}
Kurze Info:
Package: main
Datei:   caller.pl
Zeile:   8

Lange Info:
Package:   main
Datei:     caller.pl
Zeile:     4
Funkt.:    main::call_a_caller
HasArgs:   1
