相关疑难解决方法(0)

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

我在Windows 7上运行ActiveState的32位ActivePerl 5.14.2.我想用Git预提交钩子来检测正在检查的语法错误的程序.(不知怎的,我只是设法做了这么糟糕的提交.)所以作为一个测试程序,我随机记下了这个:

use strict;
use warnings;

Syntax error!

exit 0;
Run Code Online (Sandbox Code Playgroud)

但是,它在没有警告的情况下编译和执行,退出时errorlevel为零.这个有效的语法怎么样?

perl

487
推荐指数
5
解决办法
2万
查看次数

为什么“尝试”不会导致未定义的子例程错误?

有几次我遇到了忘记Try::Tiny在脚本中加载模块而仍然使用它的代码try-catch块的情况,如下所示:

#!/usr/bin/env perl

use strict; 
use warnings;

try {
  call_a( 'x' );
} catch {
  die "ACTUALLY die $_";
};


sub call_a {
  die "Yes, I will";
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,该脚本可以正常运行,而没有任何提示try。没有Undefined subroutine错误。这使我想知道为什么未捕获我提出的异常。

为什么这会无声地工作而没有错误?

编辑

我也查看了符号表:

say "$_: %main::{ $_ }" for keys %main::; 
Run Code Online (Sandbox Code Playgroud)

没有发现try。我也尝试像main::try上面的脚本一样调用它,它也没有引起错误。

perl

13
推荐指数
1
解决办法
206
查看次数

什么是间接对象表示法,为什么它不好,以及如何避免它?

标题几乎总结了,但无论如何这里是长版本.

在发布了一小段perl代码之后,我被告知要避免使用间接对象表示法,"因为它有几个副作用".评论引用了这一特定的行:

my $some_object = new Some::Module(FIELD => 'value');
Run Code Online (Sandbox Code Playgroud)

因为这就是我一直以来的做法,为了与时俱进,我因此问:

  • 这有什么不好的?(特别)
  • 潜在的(可能是负面的)副作用是什么?
  • 应该如何重写该行?

我正要问这位评论者,但对我而言,这是值得发表的.

oop perl coding-style perl5

8
推荐指数
3
解决办法
356
查看次数

标签 统计

perl ×3

coding-style ×1

oop ×1

perl5 ×1