PATH = "E:/path/to/html/file" FILE = "test1InLineCSS.html" #### use Config::General; my $conf = Config::General->new("foo.conf"); my %config = $conf->getall; my $filename = join('/',$config{PATH}, $config{FILE}); open INFILE, $filename or die "Can't open $filename: $!"; #### use strict; use warnings; use HTML::TokeParser::Simple; my $parser = HTML::TokeParser::Simple->new('tricky.html'); # these are the tags we just want to skip my %skip = ( u => 1, b => 1, i => 1, em => 1, big => 1, img => 1, strong => 1, ); # these are the styles we are going to add to h, p, and li tags my %modify = ( h => ';text-indent: 10px; word-spacing: 30px; letter-spacing: 3px; color: black', p => ';text-indent: 10px; word-spacing: 10px; letter-spacing: 2px; color: black', li => ';text-indent: 10px; word-spacing: 10px; letter-spacing: 2px; color: black', ); while (my $token = $parser->get_token) { # replace body bgcolor if ($token->is_start_tag('body')) { $token->set_attr(style => 'background-color: white'); } # find and skip our "skip" tags next if $token->is_tag and $skip{$token->return_tag}; # find and modify attributes for our "modify" tags if ($token->is_start_tag) { my $candidate = $token->return_tag; $candidate =~ s/h[1-6]/h/i; #hack to handle all h tags # here we get the original style attr and add the new CSS if (my $add_attr = $modify{$candidate}) { my $orig_attr = $token->return_attr; $orig_attr->{style} .= $add_attr; $token->set_attr(%$orig_attr); } } # just print to STDOUT ... change to fit your needs print $token->as_is; } #### body { text-color: black; } u,b,i,em,img,big,strong {text-decoration: none;} h1,h2,h3,h4,h5,h6 {text-indent: 10px; word-spacing: 30px; letter-spacing: 3px; color: black;} p,li {text-indent: 10px; word-spacing: 10px; letter-spacing: 2px; color: black; }