在Perl中,对任何东西的引用都是一个简单的标量,并且有$sigil.有时很难说它是什么样的参考.
我个人为带有字母的引用添加变量名称,这表示引用类型.例子:
my $aValues = []; # arrayref
my $hValue = {}; # hashref
my $oValue = bless {}; # object
my $sValue = \(my $s = 'foo'); # scalarref
...
Run Code Online (Sandbox Code Playgroud)
我见过这种符号的支持者和反对者.你用它吗?它有任何缺点吗?
从perldoc -f我们读到:
有一个单一的迭代器每个散列,由所有共享
each,keys以及values在程序的函数调用; 它可以通过读取散列中的所有元素或通过评估keys HASH或重置来重置values HASH.
当您离开包含范围的范围时,不会重置迭代器each(),这可能会导致错误:
my %h = map { $_, 1 } qw(1 2 3);
while (my $k = each %h) { print "1: $k\n"; last }
while (my $k = each %h) { print "2: $k\n" }
Run Code Online (Sandbox Code Playgroud)
输出:
1: 1
2: 3
2: 2
Run Code Online (Sandbox Code Playgroud)
这种行为的常见解决方法是什么?它each一般值得使用吗?
该d{motion}命令似乎不一致:
d1j " deletes 2 lines to the bottom
d1l " deletes 1 character to the right
Run Code Online (Sandbox Code Playgroud)
这是预期的行为吗?
如何使用netaddr库将ipv4子网掩码转换为cidr表示法?
例: 255.255.255.0 to /24
我正在尝试将少数Jenkinsfiles从Scripted Pipeline转换为Declarative Pipeline.我有一个像这样的块Jenkinsfile:
ws("/path/to/dir") {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
我想知道它究竟做了什么以及将它转换为Declarative Pipeline语法的正确方法是什么.
我需要一个优先级队列来获取具有最高优先级值的项目.我目前正在使用Queue库中的PriorityQueue类.但是,此函数仅返回具有最低值的项目.我尝试了一些丑陋的解决方案,如(sys.maxint - priority)作为优先级,但只是想知道是否存在更优雅的解决方案.
为什么$i在以下代码中没有重新声明的警告?
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
for my $i (1..3) {
my $i = 'DUMMY';
print Dumper $i;
}
Run Code Online (Sandbox Code Playgroud) sub do_printf { printf @_ }
sub do_sprintf { print sprintf @_ }
do_printf("%s\n", "ok"); # prints ok
do_sprintf("%s\n", "ok"); # prints 2
Run Code Online (Sandbox Code Playgroud) 我正在开发一个Perl项目,该项目需要一个FIFO消息队列,用于在一台机器上的多个进程之间分配任务(UNIX).队列大小可能会增加到1M个作业.
我已经尝试过了IPC::DirQueue,但是当大约5万个工作入队时,它变得非常缓慢.这个模块的哪些好的替代品可以在Perl中使用?