小编Tru*_*ood的帖子

如何识别正则表达式的"标记"(错误的单词)

我正在研究Perl中一个相当专业的搜索引擎实现,它搜索(通过正则表达式)文档,从文本文件中特别分隔(一部分:punct :)字符串.我正在做通常的搜索引擎索引技巧,但是有一个问题.

一些搜索正则表达式模式必然包括文件中使用的分隔符."好吧,我想对自己说,"接近,然后......很容易"......等式的那一边很直接.

诀窍是,因为搜索模式是正则表达式,我不能轻易确定我应该在索引数据中寻找的特定单词(如果我们讨论的是更普通的字符串,请考虑"拆分").

琐碎的例子,"square [\ s - ]*dance"将直接匹配"squaredance",但是"square dance"和"square-dance"上的邻近匹配(因为' - '是分隔符).我需要知道,基于正则表达式,分别寻找"方形"和"舞蹈",但彼此相邻.

我是挑战的游戏,但我宁愿使用已建立的代码.我的直觉告诉我它将是正则表达式引擎的内部钩子,但我不知道这样的事情.有什么建议?

regex perl search-engine

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

各种$ SIG {CHLD}值之间有什么区别?

这些设置有什么区别?

$SIG{CHLD} = 'IGNORE'  
$SIG{CHLD} = 'DEFAULT'  
$SIG{CHLD} = ''  
$SIG{CHLD} = undef
Run Code Online (Sandbox Code Playgroud)

根据"UNIX环境中的高级编程,第2版",图10.1 SIGCHLD的默认值是"忽略".

如果"忽略"意味着"SIG_IGN",那么任何孩子都不会成为僵尸,事实并非如此.

从那里开始并没有那么清楚:

如果进程专门将其处置设置为SIG_IGN,则调用进程的子进程将不会生成僵尸进程.请注意,这与其默认操作(SIG_DFL)不同,后者将忽略图10.1中的操作.相反,在终止时,将丢弃这些子进程的状态.

我很难知道各种值(或未定义的非值)的影响是什么.到目前为止,解决方案一直是旋转这些选择,直到我得到所需的行为,而我更确切地了解每个值如何定义信号的行为.

行为:子进程调用"system"或使用反引号创建另一个子进程,并且信号通常会被错误的(父)处理程序捕获.设置本地处理程序可以工作,但如果我希望来自祖母的信号什么都不做,我不明白哪个值最合适.

有人可以照亮我吗?

更新: 根据ikegami的反馈,我做了一些具体的测试.该行为至少部分是特定于平台的.

请考虑以下片段:

$SIG{CHLD} = sub {
    while( ( my $child = waitpid( -1, &WNOHANG ) ) > 0 ) {
        print "SIGNAL CHLD $child\n";
    }
};

my $pid = fork();

if( ! $pid ) {
    system( 'echo Grandchild PID = $$' );
    sleep 2;
    exit;
}

print "Child PID = $pid\n";
sleep 5;
Run Code Online (Sandbox Code Playgroud)

Solaris 10上的Perl 5.8.6将显示system()调用的PID的"SIGNAL CHLD"消息.做任何事情,即使是微不足道的

当地$ …

unix perl signals signal-handling sigchld

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

标签 统计

perl ×2

regex ×1

search-engine ×1

sigchld ×1

signal-handling ×1

signals ×1

unix ×1