我想知道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}});
}
答案 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模块可用。
答案 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>