小编hob*_*bbs的帖子

哪个cpan安装程序是正确的?(CPAN.pm/CPANPLUS/cpanminus)

有多个cpan模块安装程序可用; 我至少知道CPAN.pm(自带perl,)CPANPLUS和cpanminus.

三者有什么区别?

什么情况要求使用一个而不是另一个?

我应该知道其他模块安装程序吗?

perl cpan

66
推荐指数
3
解决办法
1万
查看次数

nohup VERBOSE = 1 perl script.pl

我有一个perl脚本,可以将ENV变量设置为指向特定输出,例如$ debug,$ verbose,$ develop等

通常我从命令行运行它们

$ VERBOSE=1 perl myperlscript.pl params
Run Code Online (Sandbox Code Playgroud)

我现在想用nohup来运行它们.使用命令行

$ nohup VERBOSE=1 perl myperlscript.pl params 
Run Code Online (Sandbox Code Playgroud)

显然是不对的,因为设置ENV {VERBOSE}的尝试被解释为nohup的一个参数并且我获得了msg

nohup:无法运行命令`VERBOSE = 1':没有这样的文件或目录

这里的语法是什么?我试图在Linux机器上运行它.

shell nohup

16
推荐指数
1
解决办法
7519
查看次数

如果使用SIGSTOP停止其中一个子进程,则子进程在终止时会死亡

我的测试代码是

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int main() {
  int c = fork();
  if (c == 0) while(1);
  c = fork();
  if (c == 0) while(1);
  c = fork();
  if (c == 0) while(1);
  c = fork();
  if (c == 0) while(1);
  while(1);
}
Run Code Online (Sandbox Code Playgroud)

所以我有一个父母和4个孩子.当我杀死父母时,孩子们正在使用init作为父母.但如果我(与SIGSTOP)停止其中一个孩子然后杀死父母,孩子们也会被杀死.为什么会这样?

c unix linux

12
推荐指数
1
解决办法
2163
查看次数

如何加载相对于模块路径的文件?

我不知道如何在Perl中做一件事,我觉得我在做一些根本错误的事情.

我正在做一个更大的项目,所以我将任务分成不同的模块.我将模块放入项目目录的"modules /"子目录中,并将此目录添加到PERL5LIB和PERLLIB.

所有这些模块都使用一些配置,保存在主项目目录中的外部文件中 - "../configure.yaml",如果从模块文件的角度来看它.

但是,现在,当我通过"use"使用模块时,模块中的所有相对路径都是从使用这些模块的脚本的当前目录获取的,而不是从模块本身的目录中获取.即使我使用FindBin或其他任何东西.

如何从模块路径加载文件?这甚至可能/可取吗?

deployment perl module

10
推荐指数
3
解决办法
2051
查看次数

定点乘法算法

我正在尝试将时间戳(仅秒的小数部分)从纳秒(10 ^ -9秒的单位)重新缩放到NTP时间戳的下半部分(单位为2 ^ -32秒).实际上这意味着乘以4.2949673.但我需要在没有浮点数学的情况下完成它,并且不使用大于32位的整数(事实上,我实际上是为8位微控制器编写这个,所以即使32位数学也很昂贵,特别是划分).

我已经提出了一些工作得相当好的算法,但我没有真正的数值方法基础,所以我很欣赏任何有关如何改进它们的建议,或任何其他更准确的算法. /或更快.

算法1

uint32_t intts = (ns >> 16) * 281474 + (ns << 16) / 15259 + ns / 67078;
Run Code Online (Sandbox Code Playgroud)

选择前两个常数略微下冲,而不是超过正确的数字,并且根据经验确定最终因子67078以纠正此问题.产生+/- 4 NTP单位的正确值,结果为+/- 1 ns - 可接受,但残差随之变化ns.我想我可以添加另一个术语.

算法2

uint32_t ns2 = (2 * ns) + 1;
uint32_t intts = (ns2 << 1)
  + (ns2 >> 3) + (ns2 >> 6) + (ns2 >> 8) + (ns2 >> 9) + (ns2 >> 10)
  + (ns2 >> 16) + (ns2 >> 18) + (ns2 …
Run Code Online (Sandbox Code Playgroud)

c fixed-point numerical-methods

8
推荐指数
1
解决办法
3317
查看次数

我的nginx模块可以在主进程中建立连接吗?

我正在编写一个想要订阅zeromq pubsub套接字的nginx模块,并根据收到的消息更新内存中的数据结构.为了节省带宽,有意义的是只有一个进程应该进行订阅,并且数据结构应该是shm,以便所有进程都可以使用它.对我而言,一个进程应该是主人似乎很自然(因为如果它是一个工人,代码必须以某种方式决定哪个工人).

但是当我ngx_get_connection从我的init_masterinit_module回调中打电话时,它会出现段错误,显然是由于ngx_cycle尚未初始化.谷歌搜索在主进程中工作的插件似乎非常悲观.是否有更好的方法来实现我的目标,即每个服务器与pubsub套接字建立单个传出连接,无论它有多少工作者?

这是一个在工作者上下文中工作的代码示例,但不是来自master:

void *zmq_context = zmq_ctx_new();
void *control_socket = zmq_socket(zmq_context, ZMQ_SUB);
int control_fd;
size_t fdsize = sizeof(int);
ngx_connection_t *control_connection;

zmq_connect(control_socket, "tcp://somewhere:1234");
zmq_setsockopt(control_socket, ZMQ_SUBSCRIBE, "", 0);
zmq_getsockopt(control_socket, ZMQ_FD, &control_fd, &fdsize);
control_connection = ngx_get_connection(control_fd, cycle->log);
control_connection->read->handler = my_read_handler;
control_connection->read->log = cycle->log;
ngx_add_event(control_connection->read, NGX_READ_EVENT, 0);
Run Code Online (Sandbox Code Playgroud)

和其他地方

void my_read_handler (ngx_event_t *ev) {
    int events;
    size_t events_size = sizeof(events);

    zmq_getsockopt(control_socket, ZMQ_EVENTS, &events, &events_size);
    while (events & ZMQ_POLLIN) {
        /* ...
           read …
Run Code Online (Sandbox Code Playgroud)

plugins nginx

8
推荐指数
1
解决办法
254
查看次数

我们如何匹配任何单个字符,包括Perl正则表达式中的换行符?

我想使用UltraEdit正则表达式(perl)将以下文本替换为一堆html文件中的其他文本:

<style type="text/css">

#some-id{}

.some-class{}

//many other css styles follow

</style>
Run Code Online (Sandbox Code Playgroud)

我尝试使用<style type="text/css">.*</style>但当然它不匹配任何东西,因为点匹配除换行之外的任何字符.我想匹配换行符,换行也许\r\n或者\n.

正则表达式应该如何?

非常感谢大家.

regex text pcre ultraedit

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

Perl中的URL百分比编码(URI转义)

任何人都可以告诉我在哪里可以找到编码功能

encode("ram@yahoo.com")==> ram%40yahoo.com

和解码("ram%40yahoo.com")==> ram@yahoo.com

谢谢

url perl escaping

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

为什么JSON模块会引用一些数字而不引用其他数字?

我们最近切换到新的JSON2 perl模块.我认为现在所有的一切都被引用了.但我遇到了一些情况,其中一个数字(250)作为由perl创建的json字符串中的未引用数字返回.

出于好奇: 有谁知道为什么会出现这种情况以及json模块如何决定是否引用一个值?

perl json

3
推荐指数
1
解决办法
1680
查看次数

MySql:事务没有检测到死锁?

请考虑以下perl代码:

$schema->txn_begin();

my $r = $schema->resultset('test1')->find({id=>20});

my $n = $r->num;
$r->num($n+1);
print("updating for $$\n");
$r->update();

print("$$ val: ".$r->num."\n");

sleep(4);

$schema->txn_commit();
Run Code Online (Sandbox Code Playgroud)

我期望由于更新受到事务的保护,如果两个进程尝试更新"num"字段,则第二个应该失败并出现一些错误,因为它丢失了竞争.Interbase将此称为"死锁"错误.然而,MySQL会在update()调用上暂停,但在第一个调用commit之后会很乐意继续.然后第二个进程具有num的"old"值,导致增量不正确.注意:

$ perl trans.pl  & sleep 1 ; perl trans.pl 
[1] 5569
updating for 5569
5569 val: 1015
updating for 5571
5571 val: 1015
[1]+  Done                    perl trans.pl
Run Code Online (Sandbox Code Playgroud)

两种情况下的结果值都是"1015".这怎么可能是正确的?

mysql perl transactions dbix-class

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

Perl和Sqlite

有人能告诉我如何从perl访问sqlite3数据库.

代码

use DBI;
use DBD::SQLite;

my $dbh = DBI->connect(
  "dbi:SQLite:dbname=/cbilldata/media/database/collector.db","",""
) or die "Cannot connect: $DBI::errstr";
Run Code Online (Sandbox Code Playgroud)

返回错误

DBI connect('dbname =/cbilldata/media/database/collector.db','',...)失败:数据库磁盘映像格式错误./db.pl第7行
无法连接:数据库磁盘映像格式错误. /db.pl第7行.

sqlite perl

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

Perl不会重新评估正则表达式变量

我负责将Perl脚本从Perl v5.6.1(2001)升级到v5.20.2(2015).我有这两个正则表达式变量:

foreach (@filelist) {
    chomp;
    my $File = $_;
    if ( $File =~ qr/.+/o ) {
        if ( $BaseLine ) {

            $BaseLineRegExpA = qr/^\Q$BaseLine\E\\/io; #these 2 regexes
            $BaseLineRegExpB = qr/^\Q$BaseLine\E;/io;  #these 2 regexes

            if ( $File =~ /$BaseLineRegExpA/ ) {
                #...

            } elsif ( (!($File =~ /$BaseLineRegExpB/)) && (!(lc( $File ) eq lc( $BaseLine ) )) ) {
                $BaseLine = $File;
            }
        }
     }
}
Run Code Online (Sandbox Code Playgroud)

所以,我有两个问题:

  1. 在老Perl版本中,$BaseLineRegExpA$BaseLineRegExpB得到重新评估每一次$BaseLine的变化,但在新的Perl,事实并非如此.如何进行更改?我试过了$BaseLineRegExpA,它仍然没有改变.

  2. 在旧的Perl中,$BaseLineRegExpAevals to:, …

regex perl

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

在Perl上创建一个类(class :: Std)

我在寻求你对Perl的帮助.

我目前通过创建一个新对象然后使用它来运行一个函数来使我的代码运行良好,但我想使用更新的Perl编码方式(使用class:Std和集成BUILD/ START函数)

所以现在我的代码看起来像这样,我调用new一个日志文件的路径,然后运行一个函数:

# Called from another perl script
use MyClass;
my $Obj = MyClass->new('/usr/me/path.log');
$Obj->run();

# My module
package MyClass;

sub new {
    shift if ( defined($_[0] eq 'MyClass') );
    my %args  = validate( @_,{ LogPath => { type => SCALAR, optional => 0 }, } );

    my $self;
    $self->{plistPath} = $_[1];
    return bless $self;
}

sub run {
    my $self = shift;
    ...
    ...
}
Run Code Online (Sandbox Code Playgroud)

而我想拥有的是这样的事情:

use Class::Std

sub BUILD …
Run Code Online (Sandbox Code Playgroud)

perl constructor reference class std

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