我想解碼複雜數據結構中的所有HTML實體。基本上我正在尋找一個「超級地圖()」功能。這是我到目前爲止:如何在Perl中的複雜數據結構的每個元素上執行給定的函數?
sub _html_decode {
my $self = shift;
my $ref = shift;
if (ref($ref) eq "HASH") {
$self->_html_decode_hash($ref)
}
if (ref($ref) eq "ARRAY") {
$self->_html_decode_array($ref);
}
}
sub _html_decode_array {
my $self = shift;
my $ref = shift;
unless (@$ref) {return;}
foreach (0 .. (scalar(@$ref) - 1)) {
if (ref($ref->[$_]) eq "HASH") {
$self->_html_decode_hash($ref->[$_]);
}
if (ref($ref->[$_]) eq "ARRAY") {
$self->_html_decode_array($ref->[$_]);
}
else {
$ref->[$_] = decode_entities($ref->[$_]);
}
}
}
sub _html_decode_hash {
my $self = shift;
my $ref = shift;
unless (%$ref) {return;}
while (my ($k, $v) = each %$ref) {
if (ref($v) eq "HASH") {
$self->_html_decode_hash($v);
}
if (ref($v) eq "ARRAY") {
$self->_html_decode_array($v)
}
else {
$ref->{$k} = decode_entities($v);
}
}
}
沒有經驗,但它聽起來像是問題的最佳解決方案。 – 2008-12-18 01:26:07