이것은 내가 작성한 두 번째 펄 스크립트 일 뿐이므로 모든 건설적인 도움/조언이 크게 감사 할 것입니다. 또한 Strawberry Perl을 사용하여 Windows 컴퓨터에서 작업 중입니다. 나는 깔끔한 모듈이 Perl을 위해서 존재한다는 것을 알고있다. (이 노트에서 설명 할 가치가없는 이유로) 모듈을 사용하는 것과는 반대로 스크립트에서 tidy.exe를 호출하는 것을 선호한다. 내 펄 스크립트가 수행 할 작업을커맨드 라인에서 아이콘을 실행하고있는 아이콘에서 그것을 실행하면 왜 perl 스크립트가 다르게 동작합니까?
:
HTML 파일을 가지고는, 그것을 복사하고,에게 .XML 확장을 제공합니다.
새로 형성된 .xml 파일에서 tidy.exe를 실행하여 올바른 형식의 xml로 만듭니다. 내가 원하는 결과를 생성 다음 명령
G:\TestFolder>perl tidy_cleanup.pl
을 사용하여 명령 줄에서 실행하면- 는 스트립 새로 만든, 잘 형성에서 XHTML 네임 스페이스
.xml 파일. 그러나 아이콘에서 스크립트를 실행하면 위의 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);
}
}
}
이 프로그램은 그러나 당신이 그것을 실행 아무것도 유용하지 믿기 어렵다. 첫 번째'while' 루프 내에서 입력과 출력 파일을 닫습니다. 그래서 한 줄만'$ newfile'에 복사됩니다. 닫힌 파일 핸들에서'readline() '과 같은 에러 메시지를 보았을 것입니다. 왜 우리에게 그들에 대해 말하지 않았습니까? 프로그램이 무엇을해야하는지 정확히 설명하면 해결할 수 있도록 도와 줄 것을 제안합니다. 첫 번째'if' 문은 목적을 가져야 만한다고 묘사했던 것보다 더 많은 것 같습니다.''태그 전에 모든 것을 제거하는 것입니다. – Borodin
맞아요, readline()을 봅니다. – 1723842
삭제 된 if 문에 대한 새 코드 – 1723842