Schrift
[thread]8868[/thread]

Perl Regular Expression - merkwürdiges Verhalten (Seite 2)



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
GoodFella
 2007-03-25 00:47
#75313 #75313
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
[quote=ptk,24.03.2007, 22:57]Schau dir mal die Strings mit Devel::Peek::Dump() an. Vielleicht sind dort Unicode-Zeichen versteckt, die man mit dem bloßen Auge nicht sehen kann.[/quote]
Quote
SV = PV(0x3f06220) at 0x3efa46c
REFCNT = 2
FLAGS = (POK,pPOK,UTF8)
PV = 0x3f43d84 "Herr"\0 [UTF8 "Herr"]
CUR = 4
LEN = 8


im Vergleich zu

Quote
SV = PV(0x3f061f0) at 0x3b202a8
REFCNT = 1
FLAGS = (PADBUSY,PADMY,POK,pPOK)
PV = 0x3f4407c "Herr"\0
CUR = 4
LEN = 8



..keine Zeichen anders, nur andere Flags bzw. Refcnt
GoodFella
 2007-03-25 01:51
#75314 #75314
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Soo... ich habe eine Read-Funktion geschrieben, die alle Strings von Spreadsheet-ParseExcel downgraded.
Getestet.
Ergebnis: Kein Effekt.
Dann hab ich die andere Variable gedowngraded, die innerhalb des Regexes steht, dann gings. Diese Variable kommt von einem Tk::Entry. Um zu testen, ob das vom splitten kommt ( Die Var wird an kommas gesplittet und dann einzeln getestet, z.B. Herr und Herrn einzeln gegen die Anredespalte getestet, wenn match, dann männlich)

Code:

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
            #Geschlechtsidentifikations-R
            $assigned_col = (defined($excel_assign{"$eo,$sheet"}[$ba_config{'sex_col'}])) ? ($excel_assign{"$eo,$sheet"}[$ba_config{'sex_col'}]) : ($ba_config{'sex_col'});
            $sex_cmp = &read_data($current_sheet, $row, $assigned_col);
            $sex_r = $none;


            print "\n\n\nsex_cmp:\n";
            Dump $sex_cmp;
            print "\nba_config{sex_m} VOR split:\n";
            Dump $ba_config{'sex_m'};
            print "\n";


            foreach my $male_cmp (split(/,/,$ba_config{'sex_m'}))
             {


            print "male_cmp VOR downgrade:\n";
            Dump $male_cmp;
            print "male_cmp NACH downgrade:\n";


            utf8::downgrade($male_cmp);


            Dump $male_cmp;


Output:

Quote
sex_cmp:
SV = PVNV(0x3cdbbf4) at 0x3b2cae8
 REFCNT = 1
 FLAGS = (PADBUSY,PADMY,POK,pPOK)
 IV = 0
 NV = 0
 PV = 0x3eabd3c "Herr"\0
 CUR = 4
 LEN = 8

ba_config{sex_m} VOR split:
SV = PVMG(0x3f27fac) at 0x3f21dbc
 REFCNT = 1
 FLAGS = (POK,pPOK,UTF8)
 IV = 0
 NV = 0
 PV = 0x3e7fca4 "Herr,Herrn"\0 [UTF8 "Herr,Herrn"]
 CUR = 10
 LEN = 12
 MAGIC = 0x3ed0b2c
   MG_VIRTUAL = &PL_vtbl_utf8
   MG_TYPE = PERL_MAGIC_utf8(w)
   MG_LEN = 10

male_cmp VOR downgrade:
SV = PV(0x3ee7398) at 0x3ef4fe0
 REFCNT = 2
 FLAGS = (POK,pPOK,UTF8)
 PV = 0x3eb0834 "Herr"\0 [UTF8 "Herr"]
 CUR = 4
 LEN = 8
male_cmp NACH downgrade:
SV = PVMG(0x3f19c74) at 0x3ef4fe0
 REFCNT = 2
 FLAGS = (SMG,POK,pPOK)
 IV = 0
 NV = 0
 PV = 0x3eb0834 "Herr"\0
 CUR = 4
 LEN = 8
 MAGIC = 0x3e87fb4
   MG_VIRTUAL = &PL_vtbl_utf8
   MG_TYPE = PERL_MAGIC_utf8(w)
   MG_LEN = 4

....


Erklärung:
$ba_cobfig{'sex_m'} wird gesplittet und einzeln $male_cmp zugewiesen.

Ergebnis: split ist nicht verantwortlich für UTF-Flag, allerdings verändern sich einige Werte (REFCNT?), weiss allerdings nicht was das bedeutet. Wichtig scheint nur, dass UTF8 schon vor dem split ein Flag war.

Das heisst für mich: ALLE Rückgabewerte von Vars aus Tk (können) sich in Regexen falsch verhalten.
Das heisst auch, ich muss meinen Code mit utf8::downgrade zumüllen.

Das muss doch anders gehen. Jemand eine Idee wie? Wäre sehr dankbar für Vorschläge, vor allem weil mir die Zeit ausgeht :(

                               Gruss,

                                     Pete

[Edit]
Erm... mir kam grad die Idee use locale nur dort einzusetzen, wo ichs brauche, innerhalb eines blocks.. also für uc / lc und dateizeugs.. Wie mache ich es nur, dass das nur für einen bestimmten Codepart gilt? Von strict her kenne ich use strict .... no strict ... also on und off schalten des pragmas.. perldoc locale gibt sowas aber nicht her. Jemand eine Idee?\n\n

<!--EDIT|GoodFella|1174785274-->
GoodFella
 2007-03-25 05:17
#75315 #75315
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Ausserdem: Jemand von Buha hatte die Idee, den Fehler in einem isolierten Script zu reproduzieren: http://www.buha.info/board/showthread.php?t=53582

Habe das mit utf::upgrade versucht zu realisieren, aber bin gescheitert; lest selbst.
Weiss jemand, wie man einzelne Variablenattribute setzen kann?
ptk
 2007-03-25 10:58
#75316 #75316
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Welches Perl benutzt du? Unicode-Bugs gibt es in allen Perls < 5.8.8, besonders in 5.8.0.
GoodFella
 2007-03-25 16:51
#75317 #75317
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
[quote=ptk,25.03.2007, 08:58]Welches Perl benutzt du? Unicode-Bugs gibt es in allen Perls < 5.8.8, besonders in 5.8.0.[/quote]
Quote
This is perl, v5.8.8 built for MSWin32-x86-multi-thread
(with 33 registered patches, see perl -V for more detail)

Copyright 1987-2006, Larry Wall

Binary build 819 [267479] provided by ActiveState http://www.ActiveState.com
Built Aug 29 2006 12:42:41
GoodFella
 2007-03-26 00:20
#75318 #75318
User since
2007-01-09
192 Artikel
BenutzerIn
[default_avatar]
Angenommen, ich verwende:

Code (perl): (dl )
1
2
3
4
 {
  use locale;
  $bla = lc('blÄH');
 }


..kann ich mir dann sicher sein, dass locale nur INNERHALB dieses Blocks gilt?
PerlProfi
 2007-03-26 16:00
#75319 #75319
User since
2006-11-29
340 Artikel
BenutzerIn
[default_avatar]
Ja, da kannst du dir sicher sein.

Allerdings kannst du locale auch an- und abschalten:
Code: (dl )
1
2
3
4
5
use locale;
...

no locale;
...


MfG
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2007-03-24 00:04.