我尝试通过首先使用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 或等效模块之一的模块。