我試圖利用cpan Thread::Queue::Any
,然後運行以下腳本首先安裝Thread::Queue::Any
重現此錯誤:
use strict;
use warnings;
use Thread::Queue::Any;
my $reference;
our $wt_to_mt_queue = Thread::Queue::Any->new();
$wt_to_mt_queue->enqueue($reference);
此完成,沒有警告或錯誤
然後我進去看了source of Thread::Queue::Any
和第50-52行如下:
sub enqueue {
return shift->SUPER::enqueue($FREEZE->(\@_));
} #enqueue
這裏調用的唯一子程序是$FREEZE
,它更接近於源,由第151行的import
方法初始化(我們可以看到現在的位置)。
所以我就決定要複製您的require
使用,但首先我必須找出在我的Thread::Queue::Any
躲在:
use Thread::Queue::Any;
use Data::Dump;
dd \%INC;
顯然,它在"Thread/Queue/Any.pm" => "C:/strawberry/perl/site/lib/Thread/Queue/Any.pm",
。所以,以反映您的require
使用,我做的:
use strict;
use warnings;
#use Thread::Queue::Any;
require 'C:/strawberry/perl/site/lib/thread/Queue/Any.pm';
my $reference;
our $wt_to_mt_queue = Thread::Queue::Any->new();
$wt_to_mt_queue->enqueue($reference);
而這給了我下面的輸出:
Use of uninitialized value in subroutine entry at C:/strawberry/perl/site/lib/thread/Queue/Any.pm line 51.
Use of uninitialized value in subroutine entry at C:/strawberry/perl/site/lib/thread/Queue/Any.pm line 51.
Can't use string ("") as a subroutine ref while "strict refs" in use at C:/strawberry/perl/site/lib/thread/Queue/Any.pm
line 51.
現在,這並不能完全反映你的錯誤,但我仍然斷定你」重新不使用模塊,實際上不是using
模塊。
還給出了模塊存儲在系統中的位置,我懷疑你實際上沒有安裝你應該使用cpan或其中的一個等價物。
是否有一個特定的原因,你正在做'require',而不是'使用Thread :: Queue :: Any;'?此外,該方法是「入隊」,而不是「入隊」。這個空間是一個隨機的複製和粘貼神器嗎? – Miller
我試圖與「使用」爲好,我面臨着同樣的problem.Its打字錯誤,我在我的代碼 – rvkreddy
使用排隊'our'?!?!?!你永遠不應該用'我們'!使用'my'。 – ikegami