运行以开头的文件时#!/usr/bin/perl -w
,出现错误:
第153行的语法错误,靠近“ =〜?”
我尝试添加“#!/ bin / bash”,此错误未附加,但是我得到了另一个
错误:“第34行:意外令牌'('附近的语法错误”
我文件中的第153行:
($output_volume =~ ?^([\S]+).mnc?) && ($base_name = $1) ||
die "sharpen_volume failed: output volume does not appear to be"
." a minc volume.\n";
Run Code Online (Sandbox Code Playgroud)
我文件中的第34行:使用MNI :: Startup qw(nocputimes);
$output_volume =~ ?^([\S]+).mnc?
Run Code Online (Sandbox Code Playgroud)
这曾经是有效的perl,因此可能会出现在旧的代码和说明材料中。
过去,m?PATTERN?中领先的m?是可选的,但是省略它会产生弃用警告。从v5.22.0开始,省略它会产生语法错误。如果您在较早的代码中遇到此构造,则只需添加m。
那是Perl代码,因此第一个错误消息是有意义的。
使用除//
match运算符之外的定界符时,您必须具有明确m
的标识符,因此
$output_volume =~ m?^([\S]+).mnc?
Run Code Online (Sandbox Code Playgroud)
仅使用//
定界符m
可以省略;来自Regex Quote-like运算子(perlop)
如果
"/"
是定界符,则缩写m
是可选的。
有关正则表达式和perlre的教程介绍,请参见perlretut。
还要注意,?
在特殊情况下,触发特定正则表达式行为的特定定界符。perlop
上面链接的文档部分结尾对此进行了讨论。
您已经有两个答案可以解释问题。
? ... ?
不再是匹配运算符的有效语法。您需要m? ... ?
代替。但是,还有其他几点可能值得提出。
#!/usr/bin/perl -w
给#!/bin/bash
。我不确定您怎么看这会有所帮助。该行定义了用于运行代码的程序。有了Perl代码后,您需要使用Perl运行它。尝试使用bash运行它不太可能有用。m? ... ?
(或以前,? ... ?
)语法触发一个晦涩的专业行为。在我看来,您的情况并不需要这种行为,因此您可以将其更改为更常见的/ ... /
。\.
),以便它与实际的点(而不是任何字符)匹配。