当前位置: 首页 > 知识库问答 >
问题:

为什么这个程序是有效的?我试图创建一个语法错误

宇文俊明
2023-03-14

我在Windows 7上运行的是ActiveState的32位ActivePerl 5.14.2。我想用Git预提交钩子来检测被检入的程序是否有语法错误。(不知何故,我只是设法做了这样一个糟糕的promise。)所以作为一个测试程序,我随机记下了这个:

use strict;
use warnings;

Syntax error!

exit 0;

但是,它编译和执行时没有警告,退出时errorlevel为零。这是怎样的有效语法?

共有3个答案

谭卜鹰
2023-03-14

您没有得到错误的原因是第一个执行的代码是

exit(0);

因为您在第一行没有分号:

Syntax error!

编译器将(错误地)猜测这是一个带有not运算符的子例程调用。然后它将执行此子例程的参数,恰好是exout(0),此时程序退出并将错误级别设置为0。没有执行其他操作,因此不会报告更多运行时错误。

您会注意到,如果您将< code>exit(0)更改为类似于< code > print“Hello world!”您得到一个错误:

Can't locate object method "Syntax" via package "error" ...

并且将设置您的错误级别:

> echo %errorlevel%
255
冯俊英
2023-03-14

我不知道为什么,但这就是Perl对它的看法:

perl -MO=Deparse -w yuck
BEGIN { $^W = 1; }
use warnings;
use strict 'refs';
'error'->Syntax(!exit(0));
yuck syntax OK

似乎解析器认为您在对< code > error -对象调用方法< code>Syntax...确实奇怪!

东郭昌胤
2023-03-14

Perl有一个名为“间接方法表示法”的语法。它允许

Foo->new($bar)

写为

new Foo $bar

这意味着

Syntax error ! exit 0;

error->Syntax(! exit 0);

error->Syntax(!exit(0));

它不仅是有效的语法,而且不会导致运行时错误,因为执行的第一件事是export(0)

 类似资料:
  • 我正在尝试用Java制作一个与OpenGL(使用LWJGL 2)的窗口。当我尝试运行时,Eclipse BuiltInclassLoader出现了ClassNotFoundException错误。 我期望输出显示一个窗口,这是真正的输出: 线程“main”java.lang.noClassDeffounder中的异常错误:org/lwjgl/lwjglexception在enginetester.

  • 我试图在Eclipse中调试一个简单的java程序,结果出现了以下错误: 本机方法中的致命错误:JDWP未初始化任何传输,jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)错误:传输错误202:连接失败:连接超时错误:JDWPTransport dt_socket未能初始化,TRANSPORT_nit(510)JDWP退出错误AGENT_ERROR_TRANSPO

  • 我在上一篇文章(https://stackoverflow.com/questions/16520216/ora-01843-not-a-valide-month)中问过这个问题,但从那以后它发生了变化,我认为最好从一开始就更加明确。 我在运行从客户表中删除客户的过程时收到此错误。 现在,当我删除一个在placed_order表中没有记录的客户时,记录被删除得很好,当试图删除一个在placed_o

  • 我已经安装了最新的构建工具;29.0.2.还是说没有安装构建工具 C:\用户\用户\下载\android-dio-\android-dios\bin\runnerw.exeC:\用户\用户\AppData\漫游\npm\cordova.cmd运行android检查JavaJDK和Android SDK版本ANDROID_SDK_ROOT=未定义(推荐设置)ANDROID_HOME=C:\用户\用户

  • 这是我的闪屏xml代码,我试图在这里创建一个有点不同的闪屏活动。我使用了一个可绘制的闪屏xml文件,我将将其设置为主题,然后将其用作启动器活动,这将导致我的主要活动。但是我的可绘制xml文件抛出了eroor AAPT:错误:格式不正确 出现问题的不是XML,而是android中应该存在的PNG:src = " @ MIP map/IC _ launcher "/

  • 因此,作为学校的一部分,我正在使用For循环,我有一些代码可以工作,但我很难理解为什么它可以工作。对我来说,重要的是要真正理解为什么一块代码能做它不能做的事情,而不仅仅是它能工作。 所以有一点背景。这个小程序利用for循环,根据用户输入打印一系列字符。其思想是用户输入一个介于1和8之间的数字,程序将打印一个字符,然后移动到下一行再打印两个,移动到下一行再打印三个等等,并打印用户输入的行数。 程序在