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

3 回答 3

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

另外,几个小注意事项:

  • 请考虑使用3 参数形式open()而不是 2 参数;以及词法文件句柄:

    open(my $fh, '>', "out.txt") or die "Error opening for writing: $!"; 打印 $fh "stuff\n";

  • 最后你没有close()文件句柄 - 我假设只是因为你提供了不完整的代码。

于 2010-08-02T21:21:10.890 回答
1

您在此行的末尾缺少一个分号:

print FILEHANDLE "use LWP::UserAgent;"
于 2010-08-02T21:25:07.013 回答
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
}

正如 Ether 在顶部的注释中所暗示的那样,几乎不需要将动态生成的代码写到文件中。eval并且Moose::Meta::*存在是有原因的。

于 2010-08-03T06:04:47.863 回答