#    use strict;    use Wx qw(wxRED :everything); #    use RegExEdit; #####################################################     package RegExEdit;          use base 'Wx::App';     $RegExEdit::VERSION = '0.1'; #    use Dialog;     use Wx::Event qw(EVT_TEXT);     my $frame="";     sub OnInit {         my( $this ) = shift;                      $frame = Dialog->new( );                  $this->SetTopWindow( $frame );         $frame->SetTitle("RegExEdit - $RegExEdit::VERSION");         EVT_TEXT($frame,$frame->{text_regex}->GetId,\&OnRegEx);         EVT_TEXT($frame,$frame->{text_match}->GetId,\&OnRegEx);                 OnRegEx();         $frame->Show( 1 );     }     sub OnRegEx {         my( $self, $event ) = @_;        #$frame->{text_log}->AppendText("Entering RegEx ");        my $regex = $frame->{text_regex}->GetValue();                  my $okay = 1;         eval {m/$regex/;};         $okay =0 if $@;                 if ($okay && $frame->{text_match}->GetValue() =~ m/$regex/) {            $frame->{text_log}->AppendText("Matcht ");            if (@+ > 1) {                  styleMatch($frame->{text_match}, @+);            }        }         $frame->{text_log}->SetDefaultStyle(Wx::TextAttr->new(Wx::Colour->new('red')));        $frame->{text_log}->AppendText("Error in RegEx: $@") if $@;     }     sub styleMatch {         #print "Entering styler: ";         my $text_ctrl = shift;         my $text    = $text_ctrl->GetValue();         my @colours = qw (red blue green yellow);         $text_ctrl->SetValue("");         #print "\tMatch text: $text ";         my @offsets = @_;         my $ln_match = shift @offsets;         my $i = 1;         my $lende = 0;         foreach (@offsets) {                          my $length = length(${"$i"});             my $ende = $_;             my $start= $ende-$length;             #print "\tEnde:$ende ";             #print "\tAnfang:$start ";             #print "\tLänge:$length ";             # Text davor             $text_ctrl->AppendText(    substr($text,$lende,($start-$lende)));             $text_ctrl->SetDefaultStyle(                  Wx::TextAttr->new(                      Wx::Colour->new('black'),                      Wx::Colour->new($colours[$i])                  )             );             $text_ctrl->AppendText(${$i});             $text_ctrl->SetDefaultStyle(                  Wx::TextAttr->new(                      Wx::Colour->new('black'),                      Wx::Colour->new('white')                  )             );             #print "\tText davor: ".substr($text,$lende,($start-$lende))." ";             $lende = $ende;             $i++;             # match text                                   }         #print $_." ".${$i++}." " foreach @offsets;     } # ab(cde)fg(hij) # abcdefghij ############################################## # generated by wxGlade 0.3.3 on Sun Aug 01 20:02:41 2004 # To get wxPerl visit [URL=http://wxPerl.sourceforge.net/]http://wxPerl.sourceforge.net/[/URL] use Wx 0.15 qw[:allclasses]; use strict; package Dialog; use Wx qw[:everything]; use base qw(Wx::Dialog); use strict; # begin wxGlade: ::dependencies # end wxGlade sub new {     my( $self, $parent, $id, $title, $pos, $size, $style, $name ) = @_;     $parent = undef              unless defined $parent;     $id     = -1                 unless defined $id;     $title  = ""                 unless defined $title;     $pos    = wxDefaultPosition  unless defined $pos;     $size   = wxDefaultSize      unless defined $size;     $name   = ""                 unless defined $name; # begin wxGlade: Dialog::new     $style = wxCAPTION|wxSYSTEM_MENU|wxDIALOG_NO_PARENT         unless defined $style;     $self = $self->SUPER::new( $parent, $id, $title, $pos, $size, $style, $name );     $self->{text_regex} = Wx::TextCtrl->new($self, -1, "ab(cde)fg(hij)", wxDefaultPosition, wxDefaultSize, );     $self->{text_match} = Wx::TextCtrl->new($self, -1, "abcdefghij", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_RICH);     $self->{text_log} = Wx::TextCtrl->new($self, -1, "", wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE);     $self->do_layout();     return $self; # end wxGlade } sub set_properties my $self = shift;     $self->SetTitle("dialog_2");     $self->SetSize(400, 300); # end wxGlade } sub do_layout my $self = shift;     $self->{sizer_1} = Wx::BoxSizer->new(wxVERTICAL);     $self->{grid_sizer_1} = Wx::FlexGridSizer->new(3, 1, 0, 0);     $self->{grid_sizer_1}->Add($self->{text_regex}, 0, wxEXPAND, 0);     $self->{grid_sizer_1}->Add($self->{text_match}, 0, wxEXPAND, 0);     $self->{grid_sizer_1}->Add($self->{text_log}, 0, wxEXPAND, 0);     $self->{grid_sizer_1}->AddGrowableRow(1);     $self->{grid_sizer_1}->AddGrowableRow(2);     $self->{grid_sizer_1}->AddGrowableCol(0);     $self->{sizer_1}->Add($self->{grid_sizer_1}, 1, wxEXPAND, 0);     $self->SetAutoLayout(1);     $self->SetSizer($self->{sizer_1});     $self->Layout(); # end wxGlade } # end of class Dialog package main;     my $app = RegExEdit->new();     $app->MainLoop;