Thread Hash Struktur senden: Client - Server (30 answers)
Opened by bloonix at 2006-08-20 07:23

topeg
 2006-11-18 01:40
#69025 #69025
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Mir war mal Data::Dumper zu langsam und ich habe mir was zusammengschrieben, das recht schnell ist, hat aber ein paar Einschränkungen. Nur Hashes, Arrays und Skalare werden serialisiert, nichts sonst, Zahlen werden zu Strings, Hashnamen und Strings dürfen kein ' enthalten, das könnte beim entpacken Probleme machen.
Der Output ist recht kompackt.
Es ist klein!
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package Mydumper;
use strict;
use warnings;

sub dumper($)
{
our sub rc($)
{
my $ref=shift(@_);
my $ref_n=ref($ref);
my $data='';
my $l;
if($ref_n)
{
if($ref_n eq 'HASH')
{
$data='{';
while (@_=each(%$ref))
{
$l=&rc($_[1]);
$data.='\''.$_[0].'\''.$l if($l);
}
$data.='}';
}
elsif($ref_n eq 'ARRAY')
{
$data='[';
$data.=&rc($_) for(@$ref);
$data.=']';
}
}
else
{ $data='\''.$ref.'\''; }
return $data;
}
return rc(shift(@_));
}

sub undumper($)
{
our $data=shift(@_);
our sub rcu()
{
my $ref;
if(index($data,'\'')!=0)
{
$data=~s/^.*?(\[|\{)//s;
my $z=$1;
if($z eq '{')
{
$ref={};
while(index($data,'}')!=0)
{
$data=~s/^'(.+?)'//s;
my $n=$1;
$ref->{$n}=&rcu();
}
$data=~s/^}//;
}
elsif($z eq '[')
{
$ref=[];
push(@$ref,&rcu()) while(index($data,']')!=0);
$data=~s/^]//;
}
}
else
{ $data=~s/^'(.*?)'//s; $ref=$1; }
return $ref;
}
return &rcu();
}

1;


Edit: Einrückungen korrigiert....\n\n

<!--EDIT|topeg|1163807733-->

View full thread Hash Struktur senden: Client - Server