error(3)
NAME
Tk::Error - Method invoked to process background errors
SYNOPSIS
Customization:
require Tk::ErrorDialog;
or
sub Tk::Error
{
my ($widget,$error,@locations) = @_;
...
}
DESCRIPTION
The Tk::Error method is invoked by perl/Tk when a back
ground error occurs. Two possible implementations are pro
vided in the distribution and individual applications or
users can (re)define a Tk::Error method (e.g. as a perl
sub) if they wish to handle background errors in some
other manner.
A background error is one that occurs in a command that
didn't originate with the application. For example, if an
error occurs while executing a callback specified with a
bind or a after command, then it is a background error.
For a non-background error, the error can simply be
returned up through nested subroutines until it reaches
the top-level code in the application; then the applica
tion can report the error in whatever way it wishes. When
a background error occurs, the unwinding ends in the Tk
library and there is no obvious way for Tk to report the
error.
When Tk detects a background error, it saves information
about the error and invokes the Tk::Error method later
when Tk is idle.
- Tk::Error is invoked by perl/Tk as if by the perl code:
- $mainwindow->Tk::Error("error message", location ...);
- $mainwindow is the MainWindow associated with widget which
detected the error, "error message" is a string describing
the error that has been detected, location is a list of
one or more "locations" which describe the call sequence
at the point the error was detected. - The locations are a typically a mixture of perl location
reports giving script name and line number, and simple
strings describing locations in core Tk or perl/Tk C code. - Tk will ignore any result returned by the Tk::Error
method. If another error occurs within the Tk::Error method (for example if it calls die) then Tk reports this
error itself by writing a message to stderr (this is to
avoid infinite loops due to any bugs in Tk::Error). - If several background errors accumulate before Tk::Error
is invoked to process them, Tk::Error will be invoked once
for each error, in the order they occurred. However, if
Tk::Error calls Tk->break, then any remaining errors are skipped without calling Tk::Error. - The Tk module includes a default Tk::Error subroutine that simply reports the error on stderr.
- An alternate definition is provided via :
"require Tk::ErrorDialog;"- that posts a dialog box containing the error message and
offers the user a chance to see a stack trace showing
where the error occurred.
BUGS
If after or fileevent are not invoked as methods of a wid
get then perl/Tk is unable to provide a $mainwindow argu
ment. To support such code from earlier versions of
perl/Tk perl/Tk therefore calls Tk::Error with string 'Tk'
instead: Tk->Tk::Error(..).. In this case the Tk::Error
in Tk::ErrorDialog and similar implementations cannot
"popup" a window as they don't know which display to use.
A mechanism to supply the MainWindow in applications which
only have one (a very common case) should be provided.
SEE ALSO
Tk::bind Tk::after Tk::fileevent
KEYWORDS
- background error, reporting