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

また、いくつかのマイナーな注意事項:

  • 2 引数ではなく、3 引数形式の の使用を検討してください。open()レキシカルファイルハンドルと同様に:

    open(my $fh, '>', "out.txt") or die "書き込み中にエラーが発生しました: $!"; print $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 に答える