0

ファン

この初心者の質問で申し訳ありませんが、私が知る必要があることをグーグルで見つけることができません。印刷はわかりますが、わかりません...

http://www.unifr.ch/sfm
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 2.
http://www.zug.phz.ch

以下を参照してください。

まあ-これはどういう意味ですか?

しばらくお待ちいただきますようお願いいたします。

最初から始めましょう:このスクリプトを実行します。このスクリプトは、私が持っているWebサイトのスクリーンショットを実行するために作成されています。mozreplを実行しています。ここに、要求されたURLのいくつかを含むファイルがあります...これはの短いスニペットにすぎないことに注意してください。実際のリスト-実際のリストははるかに長いです。3500を超える行とURLが含まれています

http://www.unifr.ch/sfm
http://www.zug.phz.ch
http://www.schwyz.phz.ch
http://www.luzern.phz.ch
http://www.schwyz.phz.ch
http://www.phvs.ch
http://www.phtg.ch
http://www.phsg.ch
http://www.phsh.ch
http://www.phr.ch
http://www.hepfr.ch/
http://www.phbern.ch
http://www.ph-solothurn.ch
http://www.pfh-gr.ch
http://www.ma-shp.luzern.phz.ch
http://www.heilpaedagogik.phbern.ch/

奇妙なのは出力です-以下を参照してください...質問:スクリプトを変更する必要があります

次の小さなスクリプトで出力を取得するのはなぜですか。

!/ usr / bin / perl

use strict;
use warnings;
use WWW::Mechanize::Firefox;

my $mech = new WWW::Mechanize::Firefox();

open(INPUT, "<urls.txt") or die $!;

while (<INPUT>) {
        chomp;
        print "$_\n";
        $mech->get($_);
        my $png = $mech->content_as_png();
        my $name = "$_";
        $name =~s/^www\.//;
        $name .= ".png";
        open(OUTPUT, ">$name");
        print OUTPUT $png;
        sleep (5);
}

ここで非常に圧倒的な出力を参照してください-率直に言って、私はそのような面白い出力を取得するのに苦労することはありません..コード全体をデバッグする必要があります....以下を参照してください、

http://www.unifr.ch/sfm
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 2.
http://www.zug.phz.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 3.
http://www.schwyz.phz.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 4.
http://www.luzern.phz.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 5.
http://www.schwyz.phz.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 6.
http://www.phvs.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 7.
http://www.phtg.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 8.
http://www.phsg.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 9.
http://www.phsh.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 10.
http://www.phr.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 11.
http://www.hepfr.ch/
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 12.
http://www.phbern.ch                                                                            

よく私はエラーを取り除くためにたくさんのことを試みました
:まあ-最初に、これはそれほど深刻なエラーではないと思います-私はそれをデバッグしなければならないと思いますそしてそれからそれはより良く働くでしょう。第二に、私は最初に、スクリプトが「マシンに過負荷をかけている」ように見えると思いましたか?今、私はそれについてよくわかりません:症状は奇妙に見えますが、「マシンの過負荷」を結論付ける必要はないと思います第三に、問題が確実に発生するようにするために取らなければならない特定の手順を考えますWWW :: Mechanize :: Firefoxに関連しているのですか?これは、Perlの警告が何を意味するのか、そして診断プラグマを使用してより多くの説明を得るという考えに私を導きます:あなたはどう思いますか?

print() on unopened filehandle FH at -e line 1 (#2) (W unopened) An I/O operation was attempted on a filehandle that w +as never initialized. 

そうですね-open()、sysopen()、またはそう+ cket()呼び出しを行うか、FileHandleパッケージからコンストラクターを呼び出す必要があります

よく-あるいは、閉じたファイルハンドルOUTPUTのprint()は、autodieを使用せず、openの戻り値もチェックしなかったことを示す多くの回答を提供します。私はそれをデバッグし、エラーが発生する場所を見つける必要があります

この初心者の質問で申し訳ありませんが、私が知る必要があることをグーグルで見つけることができません。印刷はわかりますが、わかりません...

4

1 に答える 1

1

その古い投稿ですが、気にしないでください

ディレクトリにファイルを書き込む権限がないようです。したがって、ファイルハンドルを開くことができない場合、ファイルハンドルにprint()書き込むことはできません。

以下のようなことをする方が適切かもしれません

open(OUTPUT, ">$name") or die "Cannot open file...\n";
于 2012-07-14T03:53:02.910 に答える