- 论坛徽章:
- 0
|
问题同 http://www.perlmonks.org/?node_id=783017 一样 就直接照搬那人的了
无cookie情况下输入网站 并点击下载 图片下载下来了
但是
windows 对话框 Perl Command Line Interpreter 遇到问题需要关闭。我们对此引起的不便表示抱歉。
perl
显示错误如下:
Attempt to free non-existent shared string '_TK_RESULT_', Perl interpreter: 0x2e3642c at C:/Perl/lib/Tk.pm line 252.
Attempt to free non-existent shared string '_TK_RESULT_', Perlinterpreter: 0x2e3642c at C:/Perl/lib/Tk/Widget.pm line 98 duringglobal destruction.
Free to wrong pool 2e33d20 not 284fb0 at C:/Perl/lib/Tk/Widget.pm line 98 during global destruction.
- #!/usr/bin/perl
- use strict;
- use warnings;
- use threads;
- my $cks;
- my $url;
- my $filename;
- my $cks_enter;
- my $url_enter;
- my $fnm_enter;
- sub dd{
- my $thr1 = threads->new(\&d);
- $thr1->detach();
- }
- use Tk;
- my $mw = MainWindow->new();
- $mw->resizable( 0,0 );
- $mw->title("test");
- my $frame = $mw->Frame(-borderwidth => 2,-relief => 'groove')->pack();
- my $bttn = $mw->Button(-text => "Down",-command => \&dd)->pack(-side => 'left');
- $frame->Label(-text => 'Cookies:')->pack();
- $cks_enter = $frame->Entry(-textvariable => \$cks,-width => 50)->pack();
- $frame->Label(-text => 'URL:')->pack();
- $url_enter = $frame->Entry(-textvariable => \$url)->pack(-expand => 1, -fill => 'x');
- $frame->Label(-text => 'Filename:')->pack();
- $fnm_enter = $frame->Entry(-textvariable => \$filename)->pack(-expand => 1, -fill => 'x');
- MainLoop;
- sub d {
- $cks = $cks_enter->get();
- chomp($cks);
- $url = $url_enter->get();
- chomp($url);
- $filename = $fnm_enter->get();
- chomp($filename);
- use LWP::UserAgent;
- my @headers = (
- 'User-Agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; EN; rv:1.9.0.11) Gecko/2009060215 Firefox/3.5',
- 'cookie' => "$cks",
- );
- my $ua = LWP::UserAgent->new();
- my $req = $ua->get($url,@headers);
- my $cont = $req->content;
- open PIC, ">$filename";
- binmode(PIC);
- print PIC "$cont\n";
- close PIC;
- }
复制代码
疑问在这儿:
1. 此处的 threads 是指 生成并维持tk GUI需要一个threads, 而 下载 需要另外一个 是么?
2. 如程序中所示, 目前也是两个threads么? gui的这个没有声明 但是确实是存在的?
3. 错误信息中提到了 共享变量的问题,是指 $cks、$url、$filename、$cks_enter、$url_enter、$fnm_enter这些变量都需要shared么 因为 dd这个线程中和 产生的gui中都有用到这些变量或对象?还是说需要shared其他的变量?
4. Thread:: Queue 此处需要使用么?
非常感谢! |
|