标签: die

php OOP异常还是死()?

我正在开发一些项目.我想控制不同的错误.我知道在所有流行的框架和php项目中都有不同的异常.但我认为这不是必需的工作.如果发生错误,我们可以使用我们的消息制作die().1.例外的主要优点是什么?2.我可以用die()控制我的错误吗?

谢谢.

php oop coding-style exception die

2
推荐指数
1
解决办法
3024
查看次数

什么印刷?

以下是我尝试执行的代码

$a=0;  
if($a==0){die  print"zero"};  
Run Code Online (Sandbox Code Playgroud)

我得到如下输出

1 at test.pl line 2  
Zero  
Run Code Online (Sandbox Code Playgroud)

我想知道1首先打印的是什么,是不是像die这样打印if语句返回的值?任何帮助都会得到满足

perl die

2
推荐指数
1
解决办法
498
查看次数

如何判断`die`时的行号?

我想写点:

die "Error in file $0 line number $line_number_of_this_cmd_in_file \n";
Run Code Online (Sandbox Code Playgroud)

在我的perl脚本文件中.

有帮助吗?多谢!

(perl 5)

perl die line-numbers

2
推荐指数
2
解决办法
450
查看次数

我怎么能处理一个死的perl构造函数?

代码段:

my $tz = DateTime::TimeZone->new(name => 'America/San_Francisco');
Run Code Online (Sandbox Code Playgroud)

这会立即死亡,因为America/San_Francisco它不是公认的时区.

打印以下消息:

无法加载时区'America/San_Francisco',或者名称无效.

我想在脚本退出之前处理此错误并为用户打印其他信息.我尝试过使用unless,但没有运气die.

如何才能做到这一点?

error-handling perl die

2
推荐指数
1
解决办法
148
查看次数

Perl子例程如何报告调用它的行?

我正在编写一个Perl管道,一个调用各种其他程序的脚本,并管理从一个到另一个的数据传递.脚本(称之为pipeline.pl)和它管理的各种子脚本共享一个subroutines.ph通过require subroutines.ph指令定义和包含的公共子程序列表.

其中一个是一个函数,其工作是退出打印错误消息(实际的子例程也做了一些其他工作,但它们在这里没有关系;不,我不是重新发明die()):

## subroutines.ph
sub errorDie
{
    my ($errMsg) = @_;
    ## various other cleanup tasks here
    die($errMsg);
}
1;
Run Code Online (Sandbox Code Playgroud)

并且,在pipeline.pl:

#!/usr/bin/perl 
require 'subroutines.ph';

errorDie("foo")
Run Code Online (Sandbox Code Playgroud)

运行上面的脚本会导致:

foo at subroutines.ph line 5.
Run Code Online (Sandbox Code Playgroud)

是否可以让它报告类似于:

foo at pipelines.pl line 4.
Run Code Online (Sandbox Code Playgroud)

因此,die()它不应报告找到的行,而应报告errorDie调用子例程的原始脚本行.我知道我可以通过在$errMsg变量中包含行来实现这一点,但这很脆弱且很麻烦.这可以自动完成吗?外部文件中定义的子程序能否检测到它的调用位置?

perl error-reporting die subroutine

2
推荐指数
1
解决办法
127
查看次数

压倒呱呱叫咯咯从Perl的鲤鱼模块中忏悔

我知道如何覆盖内置的函数perl,我已经覆盖die warn say,因为print并且printf无法覆盖我已将它绑定到我的日志框架的句柄.

覆盖示例warn:

BEGIN{ *CORE::GLOBAL::warn = sub {
                my ($package, $filename, $line, $subroutine) = caller;
                untie *STDERR;
                my $message;
                foreach my $arg (@_) {
                        $message = $message.$arg;
                }
                print STDERR $message;
                tie *STDERR, __PACKAGE__, (*STDERR);
                logmessage("warn",$message,$filename, $line);
                return;
        }
}
Run Code Online (Sandbox Code Playgroud)

现在我可以croak cluck confess carpcarp模块中覆盖Perl吗?

perl overriding carp die

2
推荐指数
1
解决办法
113
查看次数

CORE::GLOBAL::die 在 BEGIN 中重新定义

我有以下代码

print "Starting..\n";
eval { die "Before die sub redefinition\n" };
#die "Before die sub redefinition\n";
BEGIN {
    print "inside Begin block\n";
    *CORE::GLOBAL::die = sub {
        my ($message) = @_;
        print "Message: " . $message ."\n";
    }
}
eval { die "Right after begin block\n" };
print "done\n";
Run Code Online (Sandbox Code Playgroud)

输出如下,

inside Begin block
Starting..
Message: Right after begin block

done
Run Code Online (Sandbox Code Playgroud)

BEGIN块在任何其他语句之前首先执行;但是重新定义的CORE::Global::die只有在重新定义后才有效。Firstdie不使用重新定义的版本,而是使用原始版本。有人可以帮我找出原因吗?

perl die

2
推荐指数
1
解决办法
58
查看次数

在PHP块中使用die()之后如何显示静态HTML?

假设我有一些像这样的代码:

<html>
<head><title>Title</title></head>
<body>

<?php
if (!$someCondition){
  die();
}
else{
  #Do something
}
?>
</body>
<html>
Run Code Online (Sandbox Code Playgroud)

我希望这段代码的目的很简单.如果满足某个条件(即无法连接到数据库),那么程序应该死掉,否则它应该执行.执行die()函数时出现问题.它停止那里,只发送前三行的浏览器,但不是最后两行.

是否有一个功能,我可以使用而不是die(),以便php块将停止执行,但静态HTML文本仍然通过?

php die

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

不应该在php中死()能打印出数字吗?

如果我订

$myVar = "yay";
die($myVar);
Run Code Online (Sandbox Code Playgroud)

那回声出来耶,并杀死脚本.

但是,如果我设置

$myVar = 2;
die($myVar);
Run Code Online (Sandbox Code Playgroud)

没有回声.

这是为什么?

干杯伙计们.

php die

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

在Perl中使用die时退出代码

我已经die在perl中覆盖了我的日志框架,因此它可以记录消息并在控制台上打印它.

被覆盖的骰子代码:

BEGIN{ *CORE::GLOBAL::die = sub { 
        my ($package, $filename, $line, $subroutine) = caller;
        untie *STDERR;
        my $message;
        foreach my $arg (@_) {
            $message = $message.$arg;
        }

        print STDERR $message;
        tie *STDERR, __PACKAGE__, (*STDERR);
        logmessage("die",$message,$filename, $line);
        #What exit code to pass?
        #exit CODE;
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道退出进程时要设置的退出代码,因为正常的die退出时出现错误代码.

  • 有什么方法可以找出调用die时要设置的退出代码吗?

  • 如果可以知道perl中可用的错误代码列表会有帮助吗?

error-handling perl die

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