Schrift
[thread]11094[/thread]

funktion kompakter schrieben



<< |< 1 2 >| >> 16 Einträge, 2 Seiten
mr-sansibar
 2008-01-03 22:02
#104364 #104364
User since
2006-04-13
90 Artikel
BenutzerIn
[default_avatar]
kann man diese Funktion kompakter schreiben ?

vg, mr-sansibar

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
sub work_with_tmp_line {
        my ($message) = @_;
        if ( $message =~ /socketException/ ) {
                return 'NullPointerException';
        }
        elsif ( $message =~ /ArrayIndexOutOfBoundsException/ ) {
                return 'ArrayIndexOutOfBoundsException';
        }
        elsif ( $message =~ /NullPointerException/ ) {
                return 'NullPointerException';
        }
        elsif ( $message =~ /LockedPinException/ ) {
                return 'LockedPinException';
        }
        elsif ( $message =~ /AuthenticationException/ ) {
                return 'AuthenticationException';
        }
        elsif ( $message =~ /BusinessServiceException/ ) {
                return 'BusinessServiceException';
        }
        elsif ( $message =~ /IllegalStateException/ ) {
                return 'IllegalStateException';
        }
        elsif ( $message =~ /NumberFormatException/ ) {
                return 'NumberFormatException';
        }
        elsif ( $message =~ /Exception/ ) {
                return 'Exception';
        }
        elsif ( $message =~ /NoSuchElementException/ ) {
                return 'NoSuchElementException';
        }
        elsif ( $message =~ /RemoteException/ ) {
                return 'RemoteException';
        }
        elsif ( $message =~ /SQLException/ ) {
                return 'SQLException';
        }
        elsif ( $message =~ /IOException/ ) {
                return 'IOException';
        }
        elsif ( $message =~ /FileNotFoundException/ ) {
                return 'FileNotFoundException';
        }
        else {
                return 'No Exception';
        }
}
#Kein Kommentar
 2008-01-03 22:26
#104366 #104366
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
du könntest die meldungen alle einem array speichern, macht das dann alles wartbarer.

kleines beispiel:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my @strings     = qw (
                                abc 
                                def 
                                der
                          );

my $string      = join ("|", @strings);

my $test        = "defined";


if ($test =~ m/$string/i){
        print "GEFUNDEN! ($&)\a\a\a\a";
}

<>;
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
renee
 2008-01-03 23:04
#104367 #104367
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Aber auf $& sollte man verzichten - es bremst *alle* Regulären Ausdrücke im Programm aus...

Mach aus
Code: (dl )
1
2
3
12: if ($test =~ m/$string/i){
13: print "GEFUNDEN! ($&)\a\a\a\a";
14: }


einfach
Code: (dl )
1
2
3
12: if ($test =~ m/($string)/i){
13: print "GEFUNDEN! ($1)\a\a\a\a";
14: }
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Ronnie
 2008-01-04 00:56
#104370 #104370
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
1
2
3
4
5
sub work_with_tmp_line {
    my ($message) = @_;
    $message =~ /(\w+)(Exception)/ and return "$1$2";
    return 'No Exception';
}
topeg
 2008-01-04 09:23
#104371 #104371
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Noch was kürzer ;-)
Code (perl): (dl )
1
2
3
sub work_with_tmp_line {
     return (shift() =~ /(\w+Exception)/)?$1:'No Exception';
}

oder:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sub work_with_tmp_line {
       my $typ=join('|',qw(socket 
                           ArrayIndexOutOfBounds
                           NullPointer
                           LockedPin
                           Authentication
                           BusinessService
                           IllegalState
                           NumberFormat
                           NoSuchElement
                           Remote
                           SQL
                           IO
                           FileNotFound));
     return (shift() =~ /((?:$typ)?Exception)/)?$1:'No Exception';
}
#Kein Kommentar
 2008-01-04 13:17
#104381 #104381
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
es gibt aber noch die möglichkeit nur Execption zu haben, also:

Code (perl): (dl )
1
2
3
sub work_with_tmp_line {
    return (shift() =~ /(\w*Exception)/)?$1:'No Exception';
}
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
FIFO
 2008-01-05 23:31
#104439 #104439
User since
2005-06-01
469 Artikel
BenutzerIn

user image
mr-sansibar+2008-01-03 21:02:16--
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
sub work_with_tmp_line {
        my ($message) = @_;
        if ( $message =~ /socketException/ ) {
                return 'NullPointerException';
        }
        ...

        elsif ( $message =~ /Exception/ ) {
                return 'Exception';
        }
        ...
}


btw: In dieser Konstruktion werden die Muster der elsif-Zweige unterhalb Zeile 27 (Zeile 08 im quote) nicht mehr matchen, weil sie alle 'Exception' enthalten, und das wird oben bereits abgefangen ...
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"
Hagen
 2008-01-08 17:46
#104491 #104491
User since
2007-09-06
233 Artikel
BenutzerIn
[default_avatar]
#Kein Kommentar+2008-01-03 21:26:08--
du könntest die meldungen alle einem array speichern, macht das dann alles wartbarer.

kleines beispiel:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my @strings     = qw (
                                abc 
                                def 
                                der
                          );

my $string      = join ("|", @strings);
my $test        = "defined";

if ($test =~ m/$string/i){
        print "GEFUNDEN! ($&)\a\a\a\a";
}

<>;


Von der Struktur/Verständnis finde ich die Lösung sehr gut. Aber wie sieht das aus, wenn "@strings" größer wird (10, 100, 1000, ... Elemente)? Ist dann eine regexp immer noch die beste Lösung oder nutzt man dann besser etwas anderes?

Wofür steht eigentlich das <>?
Gruß
Hagen
renee
 2008-01-08 17:53
#104492 #104492
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
perldoc -f index

index ist schneller als Reguläre Ausdrücke...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
#Kein Kommentar
 2008-01-08 18:23
#104494 #104494
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
das <> ist der aktuelle Eingabekanal, also in diesem script <STDIN>. benutzt man eigentlich nur am ende, wenn man die perl-scripte nicht über die konsole aufruft, sondern mit einem doppelklick startet und so das perl-fenster gleich wieder schließen würde...
man könnte auch das schreiben:

Code: (dl )
my $ENDE_mit_einem_Return_schliesst_das_skript = <STDIN>;
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2008-01-03 22:02.