这只是我编写的第二个 perl 脚本,因此任何建设性的帮助/建议将不胜感激。另外,请注意我正在使用 Strawberry Perl 的 Windows 机器上工作。我知道 Perl 存在一个 Tidy 模块,但是(出于在本说明中不值得解释的原因)宁愿从脚本中调用 tidy.exe,而不是使用该模块。
我希望我的 perl 脚本做什么:
获取一个 html 文件,复制它,然后给它一个 .xml 扩展名。
在新形成的 .xml 文件上运行 tidy.exe 以使其成为格式良好的 xml。
从新创建的格式良好的 .xml 文件中去除 xhtml 命名空间
当我使用以下命令从命令行运行它时,G:\TestFolder>perl tidy_cleanup.pl
它会产生所需的结果。但是,当我从图标触发脚本时,它会跳过上面列出的第 2 步。根据下面发布的代码,您知道它为什么会这样吗?
这是我的代码:
#!/usr/bin/perl
use strict;
use warnings;
use File::Basename;
use FileHandle;
my $basename;
my @files = glob("*.html");
foreach my $file (@files) {
my $oldext = ".html";
my $newext = ".xml";
my $newerext = "v2.xml";
my $newfile = $file;
$newfile =~ s/$oldext/$newext/;
my $newerfile = $newfile;
$newerfile =~ s/$newext/$newerext/;
open IN, $file or die "Can't read source file $file: $\n";
open OUT, ">$newfile" or die "Can't write on file $newfile: $!\n";
print "Copying $file to $newfile\n";
{while(<IN>)
{
print OUT $_;
close(IN);
close(OUT);
}
my $xmltidy = "for \%i in ($newfile) do c:\\Tidy\\tidy.exe --output-xml yes --numeric-entities yes --doctype omit --quote-nbsp no -asxml -utf8 -numeric -m \"\%i\"";
system($xmltidy);
print "\nfinished running tidy \n\n";
}
{
open NEWIN, "$newfile" or die "Can't read source file $newfile: $!\n";
open NEWOUT, ">$newerfile" or die "Can't write on file $newerfile: $!\n";
print "Copying $newfile to $newerfile\n";
{
while (<NEWIN>) {
if ( /(\<html)( xmlns="http:\/\/www.w3.org\/1999\/xhtml" xml:lang="en-GB")(.*)/ ) {
print NEWOUT "<html$3";
}
else {
print NEWOUT $_;
}
}
close(NEWIN);
close(NEWOUT);
}
}
}