使用正则表达式确实很危险,除非您确切知道文件的格式,否则使用正则表达式很容易解析,并且您确定它将来不会改变。
否则,您确实可以使用 XML::Twig,如下所示。另一种方法是使用 XML::LibXML,尽管文件可能有点大,无法完全加载到内存中(同样,也许不是,现在内存很便宜)所以你可能不得不使用拉模式,我不太了解。
紧凑的 XML::Twig 代码:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
use Digest::MD5 'md5_base64';
my @tags_to_anonymize= qw( name surname address email phone);
# the handler for each element ($_) sets its content with the md5 and then flushes
my %handlers= map { $_ => sub { $_->set_text( md5_base64( $_->text))->flush } } @tags_to_anonymize;
XML::Twig->new( twig_roots => \%handlers, twig_print_outside_roots => 1)
->parsefile( "my_big_file.xml")
->flush;