Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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
仅某些函数需要perl 5.10_Perl_Version - Fatal编程技术网

仅某些函数需要perl 5.10

仅某些函数需要perl 5.10,perl,version,Perl,Version,我有一个perl例程库,我用它加载perl脚本 do "/path/to/library"; 库中的大多数函数在perl>=5.000上运行良好。 但是,其中一个函数依赖于perl>=5.010,因为它使用线程 是否有一种干净的方法允许程序在perl 5.008上运行并加载库,并且只有在试图访问受限函数时才会在运行时失败 我试过了 sub threadMap{ use 5.010; #need perl 5.10 threads or else you get confusing erro

我有一个perl例程库,我用它加载perl脚本

do "/path/to/library";
库中的大多数函数在perl>=5.000上运行良好。 但是,其中一个函数依赖于perl>=5.010,因为它使用线程

是否有一种干净的方法允许程序在perl 5.008上运行并加载库,并且只有在试图访问受限函数时才会在运行时失败

我试过了

sub threadMap{
  use 5.010; #need perl 5.10 threads or else you get confusing error messages
  my %arg = @_;
但perl似乎只在读取库文件时评估“使用”:

[js21n17][/u/jamie/bin]> ./jdPerlLib.pl 
Perl v5.10.0 required--this is only v5.8.8, stopped at ./jdPerlLib.pl line 12230.
BEGIN failed--compilation aborted at ./jdPerlLib.pl line 12230.

我将使用这个perlvar$^V,但我想我会在这里寻求智慧,以防这是一个糟糕的想法。

对于运行时检查,您可以使用

require 5.010;
您也可以使用

if ($] >= 5.010) { ... }
use Config qw( %Config );

if ($Config{usethreads}) { ... }
也就是说,5.8也支持线程。你可能应该使用

require threads;
您也可以使用

if ($] >= 5.010) { ... }
use Config qw( %Config );

if ($Config{usethreads}) { ... }

尝试使用$^V,但有趣的是,5.008不支持使用$],因此现在使用$]在5.8上可以正确生成线程,但在它们开始后,我收到了关于我要求线程调用的CodeRef的投诉,所以我只是强迫用户使用5.010+。我选择了“$]>=5.010”。谢谢