Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]13074[/thread]

Encode::encode in eval abfangen

Leser: 3


<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
burnersk
 2009-01-29 12:03
#118464 #118464
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich möchte Encode::encode mit eval abfangen um die Fehlermeldungen nicht meinem Modul zuzuweisen sondern dem Script, welches mein Modul eingebunden hat.

Also:
- script.pl
- > module.pm
- - > Encode.pm

Bei falschem Charset bekommt module.pm die Fehlermeldung. Es soll aber per Carp::croak an script.pl weitergeleitet werden.

aktueller (nicht funktionierender) Aufbau:
Code (perl): (dl )
1
2
if ($charset && (lc($charset) ne 'utf-8')) { if (!eval { $output = encode($charset, $output); }) { croak($!); } }
elsif ($charset && (lc($charset) eq 'utf-8')) { if (!eval { $output = encode('utf8', $output); }) { croak($!); } }
pq
 2009-01-29 12:24
#118467 #118467
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
burnersk+2009-01-29 11:03:02--
aktueller (nicht funktionierender) Aufbau:

was heisst denn "nicht funktionierend"? fliegt dir dein rechner um die ohren?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2009-01-29 12:25
#118469 #118469
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
burnersk+2009-01-29 11:03:02--
Code (perl): (dl )
if ($charset && (lc($charset) ne 'utf-8')) { if (!eval { $output = encode($charset, $output); }) { croak($!); } }

was willst du hier mit der variable $! anfangen?
der eval-error steht in $@, wie du in
perldoc -f eval
nachlesen kannst.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
GwenDragon
 2009-01-29 12:27
#118470 #118470
User since
2005-01-17
14748 Artikel
Admin1
[Homepage]
user image
Code: (dl )
1
2
3
4
5
6
7
8
if ($charset && (lc($charset) ne 'utf-8')) { 
eval { $output = encode($charset, $output); };
croak($@) if $@;
}
elsif ($charset && (lc($charset) eq 'utf-8')) {
eval { $output = encode('utf8', $output); };
croak($@) if $@;
}


Ich würde die Dekodierung sowieso in eine eigene Funktion packen.

Aber das kannst du vielleicht auch selbst. ;)
burnersk
 2009-01-29 12:33
#118472 #118472
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
pq+2009-01-29 11:25:54--
der eval-error steht in $@,

Da steht nix drin.

Code: (dl )
1
2
Unknown encoding 'utf-28' at lib1/module.pm line 142
at X:\www\cgi-bin\script.pl line 57



GwenDragon+2009-01-29 11:27:02--
Ich würde die Dekodierung sowieso in eine eigene Funktion packen.

Verstehe ich jetzt nicht ganz... Wozu soll das gut sein wenn man es nur ein mal braucht. Wird dann ja *langsamer* weil erst die sub aufgerufen werden muss und und und.
pq
 2009-01-29 12:35
#118473 #118473
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
burnersk+2009-01-29 11:33:07--
pq+2009-01-29 11:25:54--
der eval-error steht in $@,

Da steht nix drin.

wenn in $@ nichts drinsteht, dann gabs auch keinen fehler. wenn ein eval fehlschlägt, ist
$@ *immer* gesetzt.
(und ausserdem ist es auch keine lösung, einfach mal eine ganz andere variable zu benutzen, nur
weil die aus der doku sich anscheinend nicht so wie dokumentiert verhält.)
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
burnersk
 2009-01-29 12:36
#118474 #118474
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
Deswegen habe ich das Thema erstellt. Wie bringe ich Encode bei, dass er *anständig* died

Und achte meinen Codecite von eben!

pq+2009-01-29 11:35:33--
(und ausserdem ist es auch keine lösung, einfach mal eine ganz andere variable zu benutzen, nur
weil die aus der doku sich anscheinend nicht so wie dokumentiert verhält.)

Haeh? flamen?!
pq
 2009-01-29 12:38
#118475 #118475
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
burnersk+2009-01-29 11:36:48--
Deswegen habe ich das Thema erstellt. Wie bringe ich Encode bei, dass er *anständig* died

es ist an der zeit, dass du ein vollstandiges, das fehlerhafte verhalten reproduzierendes skript postest.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2009-01-29 12:41
#118476 #118476
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
burnersk+2009-01-29 11:36:48--
pq+2009-01-29 11:35:33--
(und ausserdem ist es auch keine lösung, einfach mal eine ganz andere variable zu benutzen, nur
weil die aus der doku sich anscheinend nicht so wie dokumentiert verhält.)

Haeh? flamen?!

haeh? paranoia?
du benutzt in einem skript die variable $!.
ich frage nach, warum $!, wo doch $@ die richtige variable wäre, und verweise auf die doku.
du gibst als grund an, das du $! benutzt, weil $@ ja leer ist. ende deiner antwort.
das ist doch kein grund!
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
burnersk
 2009-01-29 12:44
#118477 #118477
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
module.pm
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
#!/usr/bin/perl
use strict;
use warnings;

package module;
use Carp qw(carp croak);
use Encode;

sub new {
        my $invocant = shift;
        my $class = ref($invocant) || $invocant;
        my $self = {};
        bless($self, $class);
        return($self);
}

sub test {
        if (!eval { encode('charset-das-es-nicht-gibt', 'text') }) {
                croak($@);
        }
}

1;


script.pl
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl -wT

use strict;
use warnings;

use lib '.';
use module;

my $module = new module;
$module->test();

1;




Return
Code: (dl )
1
2
Unknown encoding 'charset-das-es-nicht-gibt' at module.pm line 18
at X:\www\cgi-bin\script.pl line 10
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2009-01-29 12:03.