Thread Perl Regular Expression - merkwürdiges Verhalten (16 answers)
Opened by GoodFella at 2007-03-24 00:04

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-->

View full thread Perl Regular Expression - merkwürdiges Verhalten