相关疑难解决方法(0)

核心Perl中是否有任何内容可以自动从"<>"运算符中选择行?

我在进行Perl编码时遇到的一个小烦恼就是必须记住选择从输入中读取的行.是的,经过多年的编码,它几乎是自动记住这样做,但仍然很烦人.

Perl中是否存在任何编译指示,模块或其他任何内容(强烈优选的核心模块),它们会自动选择使用<>运算符读取的每一行?

perl input

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

Perl:嘲笑-d -f和朋友.如何将它们放入CORE :: GLOBAL

CORE文档向我展示了如何快乐地模拟各种构建的Perl函数.但是,我不确定如何替换'-d'和c.用我的方法.所以这实际上只是一个关于如何在CORE :: GLOBAL中用短划线替换函数的问题.

手动参考会很好.

package Testing::MockDir;

use strict;
use warnings;
use Exporter();
use Symbol 'qualify_to_ref';

*import = \&Exporter::import;

our @EXPORT_OK = qw(SetMockDir UnsetMockDir);

our %EXPORT_TAGS = (
    'all' => \@EXPORT_OK,
);

my %path2List = ();
my %handle2List = ();

BEGIN {
    *CORE::GLOBAL::opendir = \&Testing::MockDir::opendir;
    *CORE::GLOBAL::readdir = \&Testing::MockDir::readdir;
    *CORE::GLOBAL::closedir = \&Testing::MockDir::closedir;

    ######################### the "-" is really the problem here
    *CORE::GLOBAL::-d = \&Testing::MockDir::mock_d; # This does not work <<<<<
}

sub mock_d ($) {
    die 'It worked';
}

sub SetMockDir {
    my …
Run Code Online (Sandbox Code Playgroud)

perl mocking

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

如何使用模拟的"readline"函数自动分配到"$ _"?

Perl对readline函数(以及等效的<>I/O运算符)进行了一些特殊处理,它处理表达式

while (<HANDLE>)
while (readline(HANDLE))
Run Code Online (Sandbox Code Playgroud)

相当于

while (defined($_ = <HANDLE>))
Run Code Online (Sandbox Code Playgroud)

比照

$ perl -MO=Deparse -e 'f($_) while <>'
f($_) while defined($_ = <ARGV>);      <--- implicitly sets $_
-e syntax OK
Run Code Online (Sandbox Code Playgroud)

但是如果你劫持这个readline功能,这种自动分配似乎不会发生:

$ perl -MO=Deparse -e 'BEGIN {
> *CORE::GLOBAL::readline = sub { }
> }
> f($_) while <>'
sub BEGIN {
    *CORE::GLOBAL::readline = sub {
    };
}
f($_) while readline(ARGV);            <--- doesn't set $_ !
-e syntax OK
Run Code Online (Sandbox Code Playgroud)

当然,这会使自定义readline函数对许多遗留代码的工作不正确.这段代码的输出是"foo"BEGIN块, …

perl

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

为什么我不能覆盖Perl的内置打印?

按照这个例子,

我试图print用自己的方式覆盖:

BEGIN {*CORE::GLOBAL::print = sub {print 1};}
print 2;
Run Code Online (Sandbox Code Playgroud)

但事实证明它不起作用,2仍然是打印而不是1.

为什么?

perl

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

覆盖perl中的"eval"

有以下内容:

use 5.014;
use warnings;
BEGIN {
    use subs qw(int);
    sub int {
        print STDERR "\tthe int got: $_[0]\n";
        my $res =  CORE::int($_[0]);
        print STDERR "\tCORE::int: $res\n";
        return $res;
    }
}

my $x;
$x = 1.1 ; say "result of int($x) is: ", int($x);
$x = 6.6 ; say "result of int($x) is: ", int($x);
Run Code Online (Sandbox Code Playgroud)

它打印

    the int got: 1.1
    CORE::int: 1
result of int(1.1) is: 1
    the int got: 6.6
    CORE::int: 6
result of int(6.6) is: 6
Run Code Online (Sandbox Code Playgroud)

int …

perl

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

是否有像Firebug这样的调试工具用于服务器端Perl/CGI?

我非常喜欢使用Firebug来调试我的JavaScript代码,HTML DOM和网络加载,即:客户端关于Web开发的所有内容.

服务器端的情况并不那么明亮.我正在使用的应用程序使用Perl和强制性标准模块,如CGIDBI.我知道标准的故障排除技术,但似乎没有跟踪例如数据库查询或函数调用的调试工具,并给我很好的输出.

输出必须特别不仅仅是在STDOUT(想象Content-Type: application/json)或STDERR(通过错误日志进行捣乱非常不舒服)被拉动,并且该工具不应该要求我手动将填充物填充到核心模块中或者use Data::Dumper; print '<pre>',Dumper($foo),'</pre>'在整个代码中喷洒.

长话短说:是否有一个工具可以让Perl/CGI的服务器端调试像Firebug在客户端那样有趣?

testing debugging perl cgi

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

Perl - myprint()或重载打印命令的新定义

我是Perl的新手.我正在编写一些脚本,并希望定义我自己的打印调用myprint(),它将根据一些标志打印传递给它的东西(详细/调试标志)

open(FD, "> /tmp/abc.txt") or die "Cannot create abc.txt file";
print FD "---Production Data---\n";
myprint "Hello - This is only a comment - debug data";
Run Code Online (Sandbox Code Playgroud)

有人可以帮我提供一些示例代码来实现myprint()功能吗?

printing perl

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

标签 统计

perl ×7

cgi ×1

debugging ×1

input ×1

mocking ×1

printing ×1

testing ×1