gpt4 book ai didi

perl - 如何在调试器中使用 Perl 5.10 功能?

转载 作者:行者123 更新时间:2023-12-04 01:08:45 26 4
gpt4 key购买 nike

我无法评估 Perl 调试器中的“现代 Perl”代码。在文件中调试代码时它可以正常工作,但不能从提示中调试。
最小的例子:

# Activating 5-10 features with -E (it works)
$ perl -E 'say "x"'
x
# 使用 -E 调用调试器
# 它适用于 infile 代码,但适用于提示行代码...
$ perl -dEbug 从 perl5db.pl 版本 1.33 加载数据库例程
DB 说“x”
在 (eval 16)[/local-perl/lib/5.12.1/perl5db.pl:638] 第 2 行,靠近“say “x””处找到操作符预期的字符串
在 (eval 16)[/local-perl/lib/5.12.1/perl5db.pl:638] 第 2 行
eval '($@, $!, $^E, $,, $/, $\\, $^W) = @saved;package main; $^D = $^D | $DB::db_stop;说“x”;

(注意:“使用功能':5.10'”也会发生同样的情况。)
我错过了什么吗?

最佳答案

我找到了对问题的引用 here ,但它大约一岁。然而,Perl 源代码的相关部分从那时起就没有改变,可以看到 here .基本上,如果你看一下 toke.c在 Perl 源代码中,您会看到以下内容:

if (PL_perldb) {
/* Generate a string of Perl code to load the debugger.
* If PERL5DB is set, it will return the contents of that,
* otherwise a compile-time require of perl5db.pl. */

const char * const pdb = PerlEnv_getenv("PERL5DB");
...
}
...
if (PL_minus_E)
sv_catpvs(PL_linestr,
"use feature ':5." STRINGIFY(PERL_VERSION) "';");
基本上,调试器在 -E 之前加载标志已处理,因此在加载调试器时尚未启用这些功能。其要点是您目前不能使用 -E-d命令。如果您想使用 say , switch ,或调试提示中的任何其他功能,您必须这样做:
  DB<1> use feature 'say'; say "x"
x
我见过的最接近解决方案的是:
  1. copy perl5db.pl from your PERL5LIB to either somewhere in PERL5LIB or the current directory, with a different name, say myperl5db.pl2. Edit myperl5db.pl to have use feature ':5.10'; (or just 'state', or just 'say') on the first line.3. Set the environment variable PERL5DB to "BEGIN { require 'myperl5db.pl' }"

我在 PerlMonks 找到的.

关于perl - 如何在调试器中使用 Perl 5.10 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3539710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com