Schrift
[thread]13074[/thread]

Encode::encode in eval abfangen (Seite 2)

Leser: 3


<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
GwenDragon
 2009-01-29 13:02
#118480 #118480
User since
2005-01-17
14835 Artikel
Admin1
[Homepage]
user image
Und was passt dir nicht an dem gecroakten?
Das stimmt doch!

Oder soll die Meldung vielleicht so sein:
Unknown encoding 'charset-das-es-nicht-gibt' at X:\www\cgi-bin\script.pl line 10
burnersk
 2009-01-29 13:24
#118482 #118482
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
GwenDragon+2009-01-29 12:02:46--
Unknown encoding 'charset-das-es-nicht-gibt' at X:\www\cgi-bin\script.pl line 10


Ja,

es ist ja der *dumme* devel, der im Script das falsche Charset angibt, das modul läuft ja einwandfrei. also soll eben der fehler auf dem script liegen.
Aus dem modul soll keine warnung kommen
pq
 2009-01-29 13:45
#118486 #118486
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
wieso ist es ein problem, wenn croak dir mehr informationen ausspuckt als benötigt?
das skript mit zeile steht ja in der fehlermeldung drin, und zusätzlich noch das modul.
kann immer hilfreich sein, diese info noch zu haben.
wenn du sie nicht haben willst, schneid sie halt aus $@ raus und übergib das dann an croak().
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 13:56
#118491 #118491
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
Weil es halt die Vorgabe von meinem Arbeitgeber ist.

Das erste die kommt von Encode. Das zweite leere kommt von croak.
Wenn ich croak weglasse steht die erste immer noch da!! Der Text der ersten Fehlermeldung (eigentlich $@) soll in das croak rein. Aber es ist in $@ nix drin.
Damit der Anwender die richtige Fehlerzeile bekommt. Im Modul ist die nicht, sondern im script (gut hier nicht aber charset ist ein param von test()).

Wenn der Anwender im Script $module->test('charset-das-es-nicht-gibt') angibt soll dann auch gefälligst ausschließlich die Fehlermeldung kommen Unknown encoding 'charset-das-es-nicht-gibt' at X:\www\cgi-bin\script.pl line 10 und nicht der Modulfehler. Denn das Modul ist korrekt und das Script falsch!
pq
 2009-01-29 14:06
#118493 #118493
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
burnersk+2009-01-29 12:56:46--
Wenn ich croak weglasse steht die erste immer noch da!! Der Text der ersten Fehlermeldung (eigentlich $@) soll in das croak rein. Aber es ist in $@ nix drin.

natürlich ist da was drin. ich sag nur reproduzierbares skript. zeig uns ein skript, das $@ leer lässt.
ich zeig dir das gegenteil:
Code: (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
$ cat Foo.pm
use strict;
use warnings;
package Foo;
use Carp qw/ croak /;

sub foo {
eval {
Baz::bar();
};
my $e = $@;
print "\$\@ = '$e'\n";
$e =~ s/(.*) at .*\n/$1/;
croak $e;
}

package Baz;

sub bar {
die "blubb";
}

1;
$ perl -wle'
use Foo;
Foo::foo();'
$@ = 'blubb at Foo.pm line 19.
'

blubb at -e line 3

das reported zeile 3 im aufrufenden skript (hier -e)
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 14:12
#118496 #118496
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
Das es mit die geht weiß ich selber. Es geht aber ******* noch mal nicht mit Encode - warum auch immer.

2. Ich habe ein rep. Script gepostet und es funktioniert bei mir genau wie ich gesagt hatte - nicht wie gewollt. $@ ist leer! scalar($@) == 0!

OS: Windows XP SP3
Perl: Active Perl 5.8.8
renee
 2009-01-29 14:24
#118497 #118497
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
$@ ist ***** nicht leer!

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
#!/usr/bin/perl

use strict;
use warnings;
use Encode;

eval{
encode('mein_utf','test');
};

print '$@ ist nicht leer' if $@;


Code: (dl )
1
2
C:\>encode_die.pl
$@ ist nicht leer


WinXP/Perl 5.8.8

Demnächst erstmal testen bevor man auf die ****** haut...
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/
burnersk
 2009-01-29 14:30
#118501 #118501
User since
2008-03-25
83 Artikel
BenutzerIn
[default_avatar]
Bevor ich hier gepostet habe hatte ich das tausende mal probiert
pq
 2009-01-29 17:22
#118512 #118512
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
burnersk+2009-01-29 13:12:25--
2. Ich habe ein rep. Script gepostet und es funktioniert bei mir genau wie ich gesagt hatte - nicht wie gewollt. $@ ist leer!

und das sieht man in dem von dir geposteten script wo genau? ich sehe keine stelle, an der du $@ irgendwo ausgibst oder vergleichst oder sonstwas machst. du übergibst es nur an croak(). wie kanst du bitteschön so behaupten, dass es leer ist?

ich habe dir ein script gepostet, das das von dir gewünschte tut. dazu hast du dich auch noch nicht geäussert.
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
Linuxer
 2009-01-29 17:50
#118514 #118514
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Hi,

Modul:
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
package module;
use strict;
use warnings;
use Carp qw( croak carp );
use Encode;

sub new {
    my ( $class, @args ) = @_;
    my $self = {};
    bless $self, ref( $class ) || $class;
    return $self;
}

sub foo {
    my ( $self ) = @_;

    if ( !eval { encode( 'utf-no', 'text' ) } ) {
        croak(
            "Laenge der Meldung: " . length($@),
            "\nMeldung: " . $@
        );
    }
}

1;


Skript:
Code (perl): (dl )
1
2
3
4
5
6
7
8
#!/usr/bin/perl
use strict;
use warnings;
use module;

my $mod = module->new;

$mod->foo();


Ausgabe:
Code: (dl )
1
2
3
Laenge der Meldung: 47
Meldung: Unknown encoding 'utf-no' at module.pm line 17
at script.pl line 8


Wo ist $@ leer?

edit: getestet unter WinXP und Linux.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



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