什么是Perl相当于Ruby的Pry

时间:2014-08-29 20:17:13

标签: ruby perl pry

我想知道Perl与Ruby的撬相当于什么?

假设我有一块红宝石代码

CSV.foreach('teamss.csv', headers: true) do |row|
  binding.pry
  team_array << row.to_hash
end

我可以插入binding.pry然后转到commandlind并转到pry。从这里我可以输出team_array并获得当前在该循环中通过循环的哈希值的输出。然后,我可以按下一步,看看循环中的下一次迭代。通过这种方式,我可以在终端中逐行跟踪代码中的内容。

如果我想在Perl中做这样的事情有什么可用吗?这让我可以看到每次迭代循环中究竟发生了什么,或者至少让我看到完成的循环实际吐出的东西。这样我就可以看到大型代码库中的某些东西可能会崩溃。

如果我想在这个perl代码块中加入这样的东西。我想问一个它会是什么样子的例子。在下面的代码块中或您自己选择的代码块中。或者简单的是,你可以使用它,或者没有没有这样的东西。

foreach my $secert (@secert) {

    my @example = $self->getMissingSecerts({secert=>$secert});
    next if !@example;

    $self->send_page({page=>"checksecerts/secert", param=>{secert=>$secert,      example=>\@example}});
}

3 个答案:

答案 0 :(得分:3)

Perl与Pry没有直接对等关系。对于您的特定示例,我将使用调试器。您无需在源代码中添加任何内容。只需使用-d选项调用perl:

perl -d script.pl

从那里开始,这是使用调试器命令的问题。一些比较常用的是:

  • b设置断点
  • c继续
  • s单步(步入)
  • n下一步(跳过)
  • r步骤返回
  • x检查变量
  • q退出

有关详细信息,请参阅perldebug

e.g。假设my @example = ...位于脚本的第100行,并且这是您希望每次循环检查的变量:

C:\>perl -d script.pl
...
DB<1> b 101
...
DB<2> c
...
DB<3> x \@example

答案 1 :(得分:3)

有这个CPAN模块可用。

https://metacpan.org/pod/Pry

答案 2 :(得分:1)

1)你可以使用print()语句:

use strict;
use warnings;
use 5.016;
use Data::Dumper;

my @data = (
    {a => 1, b => 2},
    {c => 3, d => 4},
    {a => 5, b => 6},
);

my %team_hash;

for my $href (@data) {
    %team_hash = %$href;

    print "$_ $team_hash{$_}\n" for (keys %team_hash);
    say '-' x 10;
}

--output:--
a 1
b 2
----------
c 3
d 4
----------
a 5
b 6
----------

2)或者,您可以使用Data :: Dumper:

use strict;
use warnings;
use 5.016;
use Data::Dumper;

my @data = (
    {a => 1, b => 2},
    {c => 3, d => 4},
    {a => 5, b => 6},
);

my %team_hash;

for my $href (@data) {
    say Dumper(\$href);
    %team_hash = %$href;
}

--output:--
$VAR1 = \{
            'a' => 1,
            'b' => 2
          };

$VAR1 = \{
            'c' => 3,
            'd' => 4
          };

$VAR1 = \{
            'a' => 5,
            'b' => 6
          };

3)或者,你可以使用perl的调试器(见perl debugger tutorial):

~/perl_programs$ perl -d my_prog.pl 

Loading DB routines from perl5db.pl version 1.37
Editor support available.

Enter h or 'h h' for help, or 'man perldebug' for more help.

main::(1.pl:6): my @data = (
main::(1.pl:7):     {a => 1, b => 2},
main::(1.pl:8):     {c => 3, d => 4},
main::(1.pl:9):     {a => 5, b => 6},
main::(1.pl:10):    );
  DB<1> v   #Show the `view` where the debugger stopped in the code
3:  use 5.016;
4:  use Data::Dumper;
5   
6==>    my @data = (
7       {a => 1, b => 2},
8       {c => 3, d => 4},
9       {a => 5, b => 6},
10  );
11  
12: my %team_hash;
  DB<1> v   #Show more of the view
10  );
11  
12: my %team_hash;
13  
14: for my $href (@data) {
15:     %team_hash = %$href;
16  }
17  
18  
  DB<1> s    #Step to the next line
main::(1.pl:12):    my %team_hash;
  DB<1> s
main::(1.pl:14):    for my $href (@data) {
  DB<1> s
main::(1.pl:15):        %team_hash = %$href;
  DB<1> p %team_hash   #No output because the debugger halted at the beginning of the line

  DB<2> s
main::(1.pl:15):        %team_hash = %$href;
  DB<2> p %team_hash   #Print the variable
a1b2
  DB<3>