Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/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
Perl 是否有更准确的方法来确定所需的最低版本?_Perl_Version - Fatal编程技术网

Perl 是否有更准确的方法来确定所需的最低版本?

Perl 是否有更准确的方法来确定所需的最低版本?,perl,version,Perl,Version,我正在努力学习Perl。我编写了一个脚本,然后试图找出运行该脚本所需的最低Perl版本 我被告知Perl附带了一个名为的程序,该程序将根据语法和显式声明确定所需的最低版本 我有以下代码: #/usr/bin/perl 使用utf8; 严格使用; 使用自动模具; 使用警告; 使用诊断; 说“嗨”; 出口0; 但当我运行脚本时,我得到以下输出: [me@herePERL]$perlver ex6-1 ------------------------------------ |文件|显式|语法|

我正在努力学习Perl。我编写了一个脚本,然后试图找出运行该脚本所需的最低Perl版本

我被告知Perl附带了一个名为的程序,该程序将根据语法和显式声明确定所需的最低版本

我有以下代码:

#/usr/bin/perl
使用utf8;
严格使用;
使用自动模具;
使用警告;
使用诊断;
说“嗨”;
出口0;
但当我运行脚本时,我得到以下输出:

[me@herePERL]$perlver ex6-1
------------------------------------  
|文件|显式|语法|外部|
| ------------------------------------ |
|ex6-1 | ~ | v5.8.0 |不适用|
| ------------------------------------ |
|最小显式版本:~|
|最低语法版本:v5.8.0|
|perl的最低版本:v5.8.0|
------------------------------------  
[me@herePERL]$
它说基于sytax的最低版本是
v5.8.0
。但是当我向脚本添加
use v5.8.0
时,我得到一个错误:

在运算符应位于的位置找到字符串。/ex6-1第16行,靠近“say”Hey”(#1)
(S语法)Perl lexer知道是需要一个术语还是一个运算符。
如果它看到了它所知道的一个术语,当它期望看到一个
接线员,它给你这个警告。通常它表示
省略了运算符或分隔符,例如分号。
(你需要预先声明吗?)(2)
(语法)这是一个有根据的猜测,与信息结合在一起
“%s在运算符预期的位置找到”。它通常意味着一个子例程或模块
正在引用尚未声明的名称。这可能是
因为文件中的排序问题,或者因为缺少
“分包”、“包装”、“要求”或“使用”声明。如果你正在引用
一些尚未定义的内容,实际上不必定义
当前位置之前的子例程或包。你可以用空的
“sub foo;”或“package foo;”输入“转发”声明。
在./ex6-1第16行“say”附近出现语法错误
由于编译错误(#3),执行./ex6-1被中止
(F) 可能意味着你有语法错误。常见的原因包括:
关键字拼写错误。
缺少分号。
缺少一个逗号。
缺少左括号或右括号。
缺少左大括号或右大括号。
缺少结束报价。
通常会有另一条与语法相关的错误消息
提供更多信息时出错。(有时打开-w会有所帮助。)
错误消息本身通常会告诉您当发生错误时它在队列中的位置
它决定放弃。有时,实际的错误是几个标记
在此之前,因为Perl擅长理解随机输入。
偶尔,行号可能会有误导性,而且是千载难逢的
找出触发错误的原因的唯一方法是调用
perl-c重复,每次删除一半程序以查看
如果错误消失了。有点像20个问题的控制论版本。
来自用户代码的未捕获异常:
在./ex6-1第16行“say”附近出现语法错误
由于编译错误,./ex6-1的执行被中止。
错误表明
say
未包含在
v5.8.0
中。那么,我如何才能准确地找到运行脚本所需的最低Perl版本呢


或者是否有一个完整的Perl函数列表(由verison number列出),我可以自己解析以获得最低版本?

您的程序在任何Perl版本中都无效

$ perl5.24.0 -e'use utf8; use strict; use autodie; use warnings; say "Hey"; exit 0;'
String found where operator expected at -e line 1, near "say "Hey""
        (Do you need to predeclare say?)
syntax error at -e line 1, near "say "Hey""
Execution of -e aborted due to compilation errors.
你也可以使用
foo“Hey”

从编写一个有效的程序开始


另一方面,假设您的计划包括以下内容:

use feature qw( say );
say "Hey";
此特定程序需要5.10,并且
perlver
正确识别需要5.10

   ------------------------------------
 | file | explicit | syntax  | external |
 | ------------------------------------ |
 | a.pl | ~        | v5.10.0 | n/a      |
 | ------------------------------------ |
 | Minimum explicit version : ~                             |
 | Minimum syntax version   : v5.10.0                       |
 | Minimum version of perl  : v5.10.0                       |
   ------------------------------------

可能让您困惑的是,例如,
use5.010
(或
usev5.10
)做了两件事

  • 它确保当前Perl解释器的版本至少为5.10。这就是
    要求5.010的功能

  • 它相当于
    使用功能“:5.10”
    ,启用该版本中的所有可用功能

这意味着,如果您在程序中添加
use 5.010
,它将启用
say
功能

但是如果没有
使用功能“say”
使用5.010
您的程序甚至无法编译,因此
perlver
将给您错误的答案


我建议分别使用
require 5.010
use feature'say'
,以防止无论您是否想使用所有功能都被启用,从而污染您的命名空间。这根本不是事实。我可以把上面的代码改成
说“嘿”
打印“嘿\n”并按预期运行。“你能解释你的答案吗?”迪尼,那又怎样?这根本不影响我的回答。您的程序在任何版本的Perl中都无效,
print“Hey\n”并不能证明这一点
say
只是在语句末尾添加一个
\n
print
<代码>即
v5.10
中包含了
say
,这意味着程序可以在
v5.10
中运行。所以说
确实存在。我使用的是Perl
v5.24
,它应该可以访问
say
。那么为什么
perlver
建议最低版本是
v5.8.0
?@Deanie
没有包含在5.10中,它是5.10中的可选功能。它不是自动存在的。你需要打开它。不,它不包括在5.10中<代码>说“嘿”
也是一个语法错误
   ------------------------------------
 | file | explicit | syntax  | external |
 | ------------------------------------ |
 | a.pl | ~        | v5.10.0 | n/a      |
 | ------------------------------------ |
 | Minimum explicit version : ~                             |
 | Minimum syntax version   : v5.10.0                       |
 | Minimum version of perl  : v5.10.0                       |
   ------------------------------------