in reply to Die vs. Exit

I want the code to stop, let the user make some modifications to the input in the main window and then try again without completely shutting down the program.

Here's a piece of working code that does just that:

#!/usr/bin/env perl use strict; use warnings; use Tk; my $mw = MainWindow->new(); $mw->Label(-text => 'Enter integers only:')->pack; $mw->Entry( -validate => 'key', -validatecommand => sub { $_[0] =~ /^\d+$/ }, -invalidcommand => \&lam_num_error, )->pack; $mw->Button(-text => 'Exit', -command => sub { exit })->pack; MainLoop; sub lam_num_error { $mw->messageBox(-message=>"The input must be an integer."); }

This is very basic and is only intended to show an example of Tk::Entry Validation. As it is, it only allows positive integers: you may want to change that.

Note that there's no die or exit in lam_num_error(). An Exit button is provided for users to quit the application.

-- Ken

Replies are listed 'Best First'.
Re^2: Die vs. Exit
by shortyfw06 (Beadle) on Jul 20, 2012 at 22:32 UTC
    This is an excellent example - exactly what I'm try to do! Thank you very much!

      I'm having trouble figuring out the regular expression for integers, positive or negative?

      /^-?\d+$/

      Can someone please explain what the characters mean? I may have better luck figuring it out with a good explanation? Thanks!

        YAPE::Regex::Explain provides a good explanation:

        $ perl -E ' use YAPE::Regex::Explain; my $e = YAPE::Regex::Explain->new(q{^-?\d+$})->explain; say $e; ' The regular expression: (?-imsx:^-?\d+$) matches as follows: NODE EXPLANATION ---------------------------------------------------------------------- (?-imsx: group, but do not capture (case-sensitive) (with ^ and $ matching normally) (with . not matching \n) (matching whitespace and # normally): ---------------------------------------------------------------------- ^ the beginning of the string ---------------------------------------------------------------------- -? '-' (optional (matching the most amount possible)) ---------------------------------------------------------------------- \d+ digits (0-9) (1 or more times (matching the most amount possible)) ---------------------------------------------------------------------- $ before an optional \n, and the end of the string ---------------------------------------------------------------------- ) end of grouping ----------------------------------------------------------------------

        I'd also recommend the following documentation:

        • perlrequick - Perl regular expressions quick start
        • perlretut - Perl regular expressions tutorial
        • perlre - Perl regular expressions

        -- Ken