2010-08-02 61 views
0

我想通過使用文件在Perl處理,例如生成的Perl的一些代碼行:爲什麼我的代碼生成程序中出現此語法錯誤?

open(FILEHANDLE, ">ex.pl") or die "cannot open file for reading: $!"; 
print FILEHANDLE "use LWP::UserAgent;" 
.... 
.... some code is here 
.... 
print FILEHANDLE "my \$ua = new LWP::UserAgent(agent => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060719 Firefox/1.5.0.5');" 

但是,當我編譯生成的代碼(不是生成的)我得到這個錯誤:

syntax error at F:\test\sys.pl line 14, near "print" 
Execution of F:\test\sys.pl aborted due to compilation errors. 

我該怎麼辦?

+4

第一行是矛盾的:你開放寫作,但錯誤消息說「閱讀」,這是誤導。 – Svante 2010-08-02 21:31:24

+0

@Svante:複製和粘貼宇宙中所有錯誤的54.8%的來源。 – DVK 2010-08-02 22:57:47

+0

你爲什麼要編寫生成代碼的代碼?這是一件不尋常的事情,特別是在基本腳本中。 – Ether 2010-08-02 23:15:48

回答

2

你錯過了最後一次打印的字符串(分號之前)結束時關閉' " '(雙引號)。

應該是:

print FILEHANDLE "my \$ua = new LWP::UserAgent(agent => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060719 Firefox/1.5.0.5')"; 

... Firefox/1.5.0.5')"; # To show end of that line without scrolling 

另外,兩個次要的音符:

  • 請考慮使用open()3-argument form,而不是2,參數;以及詞法文件句柄:

    打開(我的$跳頻, '>', 「out.txt」)或死亡 「錯誤打開寫:$!」; print $ fh「stuff \ n」;

  • 最後沒有文件句柄的close() - 我只是假設你給出了不完整的代碼。

+0

是的,但,當我把「最後的打印結束時,我再次得到這個錯誤 我編輯 – Eve 2010-08-02 21:22:23

+0

@Jessica:你已經把之前‘:’作爲示例答案 – DVK 2010-08-02 21:23:32

+0

@dvk:IAM真 – Eve 2010-08-02 21:24:59

1

你錯過了這條線的最後一個分號:

print FILEHANDLE "use LWP::UserAgent;" 
+0

原始版本的問題有分號,但沒有結束報價......現在有一個是一個更新的 – DVK 2010-08-02 21:27:41

0

這是你如何把它寫在現代的Perl:

use autodie qw(:all); 
{ 
    open my $handle, '>', 'ex.pl'; 
    print {$handle} <<'PERL_SOURCE'; 
use LWP::UserAgent; 
… 
# ↓ no variable quoting necessary thanks to here-document 
my $ua = LWP::UserAgent->new(agent => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.5) Gecko/20060719 Firefox/1.5.0.5'); 
… 
PERL_SOURCE 
} 

醚暗示在頂部的註釋中,幾乎不需要將動態生成的代碼寫入文件。存在evalMoose::Meta::*是有原因的。

相關問題