【发布时间】:2016-03-10 15:51:59
【问题描述】:
我有一个函数(string++ 的变体):
sub inc
{
$_[0] =~ /^(.*?)([0-9]+)$/;
my ($a,$b)=($1,$2);
die "cannot increment [$_[0]]" unless defined $b;
warn "increment overflow [$_[0]]" if length(++$b) != length($2);
$a.$b;
}
在脚本的许多地方,不同的数据(有时来自文件,有时来自数据库)上调用它。
当我从文件句柄中读取时,die 和 warn 会打印这样的消息:
cannot increment [abc] at script line 5, <filehandle> line 123.
否则会打印一条较短的消息:
cannot increment [abc] at script line 5.
当我从数据库中读取数据时,我希望收到这样的消息:
cannot increment [abc] at script line 5, <SELECT...> line 123.
有可能吗?
设置行号非常简单:可以对$. 进行赋值。但是如何设置“文件句柄”部分并使其可见?
我找到了这样的解决方法:
my $fh = "SELECT...";
open $fh, "/dev/null";
<$fh>;
但它有点长,而且它确实打开了一个文件。
【问题讨论】:
-
你能澄清你的问题吗?这感觉像是一个 XY 问题,所以如果您提供更多设置会有所帮助。也许SIG handlers DIE and WARN 与您的问题相关,但如果没有更多解释就不能说。
-
我猜你有一些东西——也许是一个 IDE——需要解析 Perl 错误消息,而当它有时没有数据输入时你不知道如何让它工作电话号码?如果您正确解释情况,有更好的方法来做到这一点
-
@ThisSuitIsBlackNot 因为我正在从数据库中读取数据(但也可能会解析一些其他计算结构)并且我想要更长的消息。不过,很容易将
$.设置为在消息中包含正确的“行”号。 -
我已更新问题以包含更多上下文。
-
"我想要更长的消息" --> 好吧,那就给它添加一些随机字符串。像这样:
warn "increment overflow ... " . "random junk text xyxyxyxyxyxy".
标签: perl