2010-08-02 89 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::*是有原因的。

相关问题