version 1.264, 2002/08/08 20:33:50
|
version 1.265, 2002/08/09 18:12:19
|
Line 1000 sub devalidate {
|
Line 1000 sub devalidate {
|
} |
} |
} |
} |
|
|
|
sub get_scalar { |
|
my ($string,$end) = @_; |
|
my $value; |
|
if ($$string =~ s/^([^&]*?)($end)/$2/) { |
|
$value = $1; |
|
} elsif ($$string =~ s/^([^&]*?)&//) { |
|
$value = $1; |
|
} |
|
return &unescape($value); |
|
} |
|
|
|
sub array2str { |
|
my (@array) = @_; |
|
my $result=&arrayref2str(\@array); |
|
$result=~s/^__ARRAY_REF__//; |
|
$result=~s/__END_ARRAY_REF__$//; |
|
return $result; |
|
} |
|
|
sub arrayref2str { |
sub arrayref2str { |
my ($arrayref) = @_; |
my ($arrayref) = @_; |
my $result='_ARRAY_REF__'; |
my $result='__ARRAY_REF__'; |
foreach my $elem (@$arrayref) { |
foreach my $elem (@$arrayref) { |
if (ref($elem) eq 'ARRAY') { |
if(ref($elem) eq 'ARRAY') { |
$result.=&escape(&arrayref2str($elem)).'&'; |
$result.=&arrayref2str($elem).'&'; |
} elsif (ref($elem) eq 'HASH') { |
} elsif(ref($elem) eq 'HASH') { |
$result.=&escape(&hashref2str($elem)).'&'; |
$result.=&hashref2str($elem).'&'; |
} elsif (ref($elem)) { |
} elsif(ref($elem)) { |
&logthis("Got a ref of ".(ref($elem))." skipping."); |
#print("Got a ref of ".(ref($elem))." skipping."); |
} else { |
} else { |
$result.=&escape($elem).'&'; |
$result.=&escape($elem).'&'; |
} |
} |
} |
} |
$result=~s/\&$//; |
$result=~s/\&$//; |
|
$result .= '__END_ARRAY_REF__'; |
return $result; |
return $result; |
} |
} |
|
|
sub hash2str { |
sub hash2str { |
my (%hash) = @_; |
my (%hash) = @_; |
my $result=&hashref2str(\%hash); |
my $result=&hashref2str(\%hash); |
$result=~s/^_HASH_REF__//; |
$result=~s/^__HASH_REF__//; |
|
$result=~s/__END_HASH_REF__$//; |
return $result; |
return $result; |
} |
} |
|
|
sub hashref2str { |
sub hashref2str { |
my ($hashref)=@_; |
my ($hashref)=@_; |
my $result='_HASH_REF__'; |
my $result='__HASH_REF__'; |
foreach (keys(%$hashref)) { |
foreach (keys(%$hashref)) { |
if (ref($_) eq 'ARRAY') { |
if (ref($_) eq 'ARRAY') { |
$result.=&escape(&arrayref2str($_)).'='; |
$result.=&arrayref2str($_).'='; |
} elsif (ref($_) eq 'HASH') { |
} elsif (ref($_) eq 'HASH') { |
$result.=&escape(&hashref2str($_)).'='; |
$result.=&hashref2str($_).'='; |
} elsif (ref($_)) { |
} elsif (ref($_)) { |
&logthis("Got a ref of ".(ref($_))." skipping."); |
$result.='='; |
|
#print("Got a ref of ".(ref($_))." skipping."); |
} else { |
} else { |
$result.=&escape($_).'='; |
if ($_) {$result.=&escape($_).'=';} else { last; } |
} |
} |
|
|
if (ref($$hashref{$_}) eq 'ARRAY') { |
if(ref($hashref->{$_}) eq 'ARRAY') { |
$result.=&escape(&arrayref2str($$hashref{$_})).'&'; |
$result.=&arrayref2str($hashref->{$_}).'&'; |
} elsif (ref($$hashref{$_}) eq 'HASH') { |
} elsif(ref($hashref->{$_}) eq 'HASH') { |
$result.=&escape(&hashref2str($$hashref{$_})).'&'; |
$result.=&hashref2str($hashref->{$_}).'&'; |
} elsif (ref($$hashref{$_})) { |
} elsif(ref($hashref->{$_})) { |
&logthis("Got a ref of ".(ref($$hashref{$_}))." skipping."); |
$result.='&'; |
|
#print("Got a ref of ".(ref($hashref->{$_}))." skipping."); |
} else { |
} else { |
$result.=&escape($$hashref{$_}).'&'; |
$result.=&escape($hashref->{$_}).'&'; |
} |
} |
} |
} |
$result=~s/\&$//; |
$result=~s/\&$//; |
|
$result .= '__END_HASH_REF__'; |
return $result; |
return $result; |
} |
} |
|
|
sub str2hash { |
sub str2hash { |
|
my ($string)=@_; |
|
my ($hash)=&str2hashref('__HASH_REF__'.$string.'__END_HASH_REF__'); |
|
return %$hash; |
|
} |
|
|
|
sub str2hashref { |
my ($string) = @_; |
my ($string) = @_; |
my %returnhash; |
|
foreach (split(/\&/,$string)) { |
my %hash; |
my ($name,$value)=split(/\=/,$_); |
|
$name=&unescape($name); |
if($string !~ /^__HASH_REF__/) { |
$value=&unescape($value); |
if (! ($string eq '' || !defined($string))) { |
if ($value =~ /^_HASH_REF__/) { |
$hash{'error'}='Not hash reference'; |
$value =~ s/^_HASH_REF__//; |
} |
my %hash=&str2hash($value); |
return (\%hash, $string); |
$value=\%hash; |
} |
} elsif ($value =~ /^_ARRAY_REF__/) { |
|
$value =~ s/^_ARRAY_REF__//; |
$string =~ s/^__HASH_REF__//; |
my @array=&str2array($value); |
|
$value=\@array; |
while($string !~ /^__END_HASH_REF__/) { |
} |
#key |
$returnhash{$name}=$value; |
my $key=''; |
|
if($string =~ /^__HASH_REF__/) { |
|
($key, $string)=&str2hashref($string); |
|
if(defined($key->{'error'})) { |
|
$hash{'error'}='Bad data'; |
|
return (\%hash, $string); |
|
} |
|
} elsif($string =~ /^__ARRAY_REF__/) { |
|
($key, $string)=&str2arrayref($string); |
|
if($key->[0] eq 'Array reference error') { |
|
$hash{'error'}='Bad data'; |
|
return (\%hash, $string); |
|
} |
|
} else { |
|
$string =~ s/^(.*?)=//; |
|
$key=$1 |
|
} |
|
$string =~ s/^=//; |
|
|
|
#value |
|
my $value=''; |
|
if($string =~ /^__HASH_REF__/) { |
|
($value, $string)=&str2hashref($string); |
|
if(defined($value->{'error'})) { |
|
$hash{'error'}='Bad data'; |
|
return (\%hash, $string); |
|
} |
|
} elsif($string =~ /^__ARRAY_REF__/) { |
|
($value, $string)=&str2arrayref($string); |
|
if($value->[0] eq 'Array reference error') { |
|
$hash{'error'}='Bad data'; |
|
return (\%hash, $string); |
|
} |
|
} else { |
|
$value=&get_scalar(\$string,'__END_HASH_REF__'); |
|
} |
|
$string =~ s/^&//; |
|
|
|
$hash{$key}=$value; |
} |
} |
return (%returnhash); |
|
|
$string =~ s/^__END_HASH_REF__//; |
|
|
|
return (\%hash, $string); |
} |
} |
|
|
sub str2array { |
sub str2array { |
|
my ($string)=@_; |
|
my ($array)=&str2arrayref('__ARRAY_REF__'.$string.'__END_ARRAY_REF__'); |
|
return @$array; |
|
} |
|
|
|
sub str2arrayref { |
my ($string) = @_; |
my ($string) = @_; |
my @returnarray; |
my @array; |
foreach my $value (split(/\&/,$string)) { |
|
$value=&unescape($value); |
if($string !~ /^__ARRAY_REF__/) { |
if ($value =~ /^_HASH_REF__/) { |
if (! ($string eq '' || !defined($string))) { |
$value =~ s/^_HASH_REF__//; |
$array[0]='Array reference error'; |
my %hash=&str2hash($value); |
} |
$value=\%hash; |
return (\@array, $string); |
} elsif ($value =~ /^_ARRAY_REF__/) { |
|
$value =~ s/^_ARRAY_REF__//; |
|
my @array=&str2array($value); |
|
$value=\@array; |
|
} |
|
push(@returnarray,$value); |
|
} |
} |
return (@returnarray); |
|
|
$string =~ s/^__ARRAY_REF__//; |
|
|
|
while($string !~ /^__END_ARRAY_REF__/) { |
|
my $value=''; |
|
if($string =~ /^__HASH_REF__/) { |
|
($value, $string)=&str2hashref($string); |
|
if(defined($value->{'error'})) { |
|
$array[0] ='Array reference error'; |
|
return (\@array, $string); |
|
} |
|
} elsif($string =~ /^__ARRAY_REF__/) { |
|
($value, $string)=&str2arrayref($string); |
|
if($value->[0] eq 'Array reference error') { |
|
$array[0] ='Array reference error'; |
|
return (\@array, $string); |
|
} |
|
} else { |
|
$value=&get_scalar(\$string,'__END_ARRAY_REF__'); |
|
} |
|
$string =~ s/^&//; |
|
|
|
push(@array, $value); |
|
} |
|
|
|
$string =~ s/^__END_ARRAY_REF__//; |
|
|
|
return (\@array, $string); |
} |
} |
|
|
# -------------------------------------------------------------------Temp Store |
# -------------------------------------------------------------------Temp Store |