Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 未定义的子程序&;main::在Any.pm问题上使用Thread::Queue::Any调用_Multithreading_Perl - Fatal编程技术网

Multithreading 未定义的子程序&;main::在Any.pm问题上使用Thread::Queue::Any调用

Multithreading 未定义的子程序&;main::在Any.pm问题上使用Thread::Queue::Any调用,multithreading,perl,Multithreading,Perl,我正在尝试使用Any.pm模块,我已经下载了该模块,并使用下面的代码,我面临错误 “未定义的子例程&main::在Any.pm第52行调用” 代码: 不知道少了什么 我试图重新创建此错误,首先使用cpan-Thread::Queue::Any安装,然后运行以下脚本: use strict; use warnings; use Thread::Queue::Any; my $reference; our $wt_to_mt_queue = Thread::Queue::Any->new(

我正在尝试使用Any.pm模块,我已经下载了该模块,并使用下面的代码,我面临错误

“未定义的子例程&main::在Any.pm第52行调用”

代码:


不知道少了什么

我试图重新创建此错误,首先使用
cpan-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);
此操作完成时没有警告或错误

然后我查看了第50-52行,如下所示:

sub enqueue {
    return shift->SUPER::enqueue( $FREEZE->( \@_ ) );
} #enqueue
use lib "/threads-module/Thread-Queue-Any-1.14/lib";
use Thread::Queue::Any;
这里调用的唯一子例程是
$FREEZE
,它通过第151行的
import
方法对源代码进行初始化(我们可以看到现在的情况)

因此,我决定重复您对
require
的使用,但首先我必须找出我的
线程::队列::Any
隐藏的位置:

use Thread::Queue::Any;
use Data::Dump;

dd \%INC;
显然它在
“Thread/Queue/Any.pm”=>“C:/草莓/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.
现在,这并没有完全反映您的错误,但我仍然得出结论,您没有正确地使用模块,而不是实际使用模块


另外,考虑到模块存储在系统中的位置,我怀疑您没有实际安装它,您应该使用cpan或其他等效工具安装它。

我试图通过首先使用
cpan线程::队列::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);
此操作完成时没有警告或错误

然后我查看了第50-52行,如下所示:

sub enqueue {
    return shift->SUPER::enqueue( $FREEZE->( \@_ ) );
} #enqueue
use lib "/threads-module/Thread-Queue-Any-1.14/lib";
use Thread::Queue::Any;
这里调用的唯一子例程是
$FREEZE
,它通过第151行的
import
方法对源代码进行初始化(我们可以看到现在的情况)

因此,我决定重复您对
require
的使用,但首先我必须找出我的
线程::队列::Any
隐藏的位置:

use Thread::Queue::Any;
use Data::Dump;

dd \%INC;
显然它在
“Thread/Queue/Any.pm”=>“C:/草莓/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.
现在,这并没有完全反映您的错误,但我仍然得出结论,您没有正确地使用模块,而不是实际使用模块


另外,考虑到模块存储在系统中的位置,我怀疑您实际上没有安装它,您应该使用cpan或其他等效工具安装它。

如果您将完整路径传递到所需路径,为什么还要设置lib?以下内容比您现有的更好:

use lib "/threads-module/Thread-Queue-Any-1.14/lib";
require "Thread/Queue/Any.pm";
更好的是:

use lib "/threads-module/Thread-Queue-Any-1.14/lib";
require Thread::Queue::Any;
但是为什么要使用
require

use lib "/threads-module/Thread-Queue-Any-1.14/lib";
use Thread::Queue::Any qw( );
qw()
表示您不想从模块导入任何内容。不幸的是,Thread::Queue::Any在
import
sub中有重要的逻辑——这是一个糟糕的设计——因此必须使用以下内容:

sub enqueue {
    return shift->SUPER::enqueue( $FREEZE->( \@_ ) );
} #enqueue
use lib "/threads-module/Thread-Queue-Any-1.14/lib";
use Thread::Queue::Any;

这将导入默认的导出(其中没有导出),但它也会调用T::Q::A中放错位置的代码。

如果将完整路径传递给require,为什么还要设置lib?以下内容比您现有的更好:

use lib "/threads-module/Thread-Queue-Any-1.14/lib";
require "Thread/Queue/Any.pm";
更好的是:

use lib "/threads-module/Thread-Queue-Any-1.14/lib";
require Thread::Queue::Any;
但是为什么要使用
require

use lib "/threads-module/Thread-Queue-Any-1.14/lib";
use Thread::Queue::Any qw( );
qw()
表示您不想从模块导入任何内容。不幸的是,Thread::Queue::Any在
import
sub中有重要的逻辑——这是一个糟糕的设计——因此必须使用以下内容:

sub enqueue {
    return shift->SUPER::enqueue( $FREEZE->( \@_ ) );
} #enqueue
use lib "/threads-module/Thread-Queue-Any-1.14/lib";
use Thread::Queue::Any;

这将导入默认的导出(其中没有导出),但它最终也会调用T::Q::A中放错位置的代码。

是否有特殊原因使您执行
require
,而不是
use Thread::Queue::Any?此外,该方法是
排队
,而不是
排队
。那个空间是随机复制粘贴的产物吗?我也尝试过“使用”,我也面临同样的问题。这是一个输入错误,我在我的代码中使用了enqueue
我们的
?!?!?!你不应该使用我们的
!使用
my
。您执行
require
,而不是
使用Thread::Queue::Any,是否有特殊原因?此外,该方法是
排队
,而不是
排队
。那个空间是随机复制粘贴的产物吗?我也尝试过“使用”,我也面临同样的问题。这是一个输入错误,我在我的代码中使用了enqueue
我们的
?!?!?!你不应该使用我们的
!使用
my
。它至少帮助我解决了这个错误,但现在我看到了一个全新的错误。enqueue中的错误是无法将代码项存储在blib/lib/Storable.pm(自动拆分为blib/lib/auto/Storable/_freeze.al)第339行的/home/threadsmodule/Thread-Queue-Any-1.14/lib//Thread/Queue/Any.pm行54I尝试了以下操作:my$ref=sub{print“hello”$wt_to_mt_queue->enqueue($ref)并得到相同的错误。然而,这个模块似乎不打算存储代码引用,只存储数据结构。阅读文档。它至少帮助我解决了这个错误,但现在我看到了一个全新的错误。enqueue中的错误是无法将代码项存储在blib/lib/Storable.pm(自动拆分为blib/lib/auto/Storable/_freeze.al)第339行的/home/threadsmodule/Thread-Queue-Any-1.14/lib//Thread/Queue/Any.pm行54I尝试了以下操作:my$ref=sub{print“hello”$wt_to_mt_queue->enqueue($ref)并得到相同的错误。然而,这个模块似乎不打算存储代码引用,只存储数据结构。阅读文档。