2014-11-03 46 views
3

修改常數項我有Perl腳本中使用以消除腹脹XML的PDF文件不必要的標籤,我創造了我的Perl可以不能取代

#!/usr/bin/perl 

#use strict; 

use DirHandle; 

my $sourcefile = shift; 
my $outputfile = "new" . $sourcefile; 

open SOURCEFILE, "$sourcefile" or die; 
open OUTPUTFILE, ">$outputfile" or die; 

$flag = 0; 
foreach $line (<SOURCEFILE>) { 
    if($line=~ /<\?templateDesigner StyleID aped2\?>\n/) { 
    if($flag == 1) { 
     line=~ s/[\t]*<\?templateDesigner StyleID aped2\?>\n//gi; 
    } 
    $flag=1; 
    } 
    elsif($line=~ /<\?templateDesigner StyleID aped3\?>\n/) { 
    if($flag == 1) { 
     $line=~ s/[\t]*<\?templateDesigner StyleID aped3\?>\n//gi; 
    } 
    $flag=1; 
    } 
    elsif($line=~ /<\?templateDesigner StyleID apcb1\?>\n/) { 
    if($flag == 1) { 
     $line=~ s/[\t]*<\?templateDesigner StyleID apcb1\?>\n//gi; 
    } 
    $flag=1; 
    } 
    else { 
    $flag=0; 
    } 
    print OUTPUTFILE $line; 
} 

close SOURCEFILE; 
close OUTPUTFILE; 

結果運行此腳本下面的錯誤。

不能在d修改常數項在替代(S ///):?\ TEMP \ PDFPatch2.pl線1 7,靠近「S/[\噸] * < \ templateDesigner StyleID aped2 \> \ n // GI;」 執行d:\ Temp \ PDFPatch2.pl由於編譯錯誤而中止。

對不起,不太瞭解perl。

+3

不要關閉'strict'。打開'警告'。這可能會清楚地表明你在第17行上輸入了錯誤,並且在$ line前面省略了$ $。 – Sobrique 2014-11-03 11:26:08

+0

關閉「嚴格」和「警告」就像是在沒有安全帶的情況下在黑暗中駕駛:它不會讓駕駛變得更安全,直到你崩潰纔會看到危險。 – TLP 2014-11-03 12:45:49

+0

錯誤消息*不是問題*。 *這是問題的有價值的指標。把它們關掉然後尋求幫助有點瘋狂。 – Borodin 2014-11-03 13:37:30

回答

13

不要關閉strict。 打開warnings

這可能會說明您在第17行上輸入了錯誤,並且在$line前面省略了$

+0

我在前面添加了'$'並打開嚴格和警告。現在我收到以下錯誤消息。真的不好意思,但是當我來到perl時,我就是這樣一個noobie。全局符號「$ flag」需要在d:\ Temp \ PDFPatch2.pl第14行顯式包名稱。 – 2014-11-03 20:06:28

+0

我在'$ flag'和'$ line'前加了'my'。這現在聲明瞭一個我可以使用的變量。現在只是得到一個消息'死在d:\ Temp \ PDFPatch2.pl第12行.' – 2014-11-03 20:21:16

+1

'open OUTPUTFILE,「> $ outputfile」或die;'。把它改成'die $!',它會告訴你爲什麼它不能打開這個文件。 – Sobrique 2014-11-03 21:32:55