如何在一个Perl守护进程中处理多个占用大量内存的套接字?

我使用IO::Socket::INET用Perl创建了一个客户机-服务器程序。我通过基于CGI的站点访问服务器。我的服务器程序将作为守护进程运行,并将同时接受多个连接。我的服务器进程消耗大约100MB的内存空间(9个大型阵列,许多阵列…)。我希望这些散列驻留在内存中并共享它们,这样我就不必为每个连接创建它们。散列创建需要10-15秒 每当通过套接字接受一个新连接时,我就会派生一个新的进程来处理接收到的每个连接。由于父进程非常庞大,每次我分叉时,处理器都会尝试将内存分配给新的子进程,但由于内存有限

什么';用Perl解析Excel文件的最佳方法是什么?

用Perl解析Excel文件最简单的方法是什么?将其转换为文本文件也会起作用。我很幸运地使用了。最好的方法是使用我们心爱的人提供的模块 无论何时遇到问题,请立即询问:为什么我还没有检查CPAN? 哪一个模块我不能确定,这里有一个列表,让你开始,试试,看看什么是有效的 最好的方法是使用 以下是一个例子: #!/usr/bin/perl -w use strict; use warnings; use Spreadsheet::ParseExcel; my $parser = S

为什么赢了';t Perl/Tk擦除我的电子表格?

[再次交叉张贴到Mahalo答案] My使用Tk::TableMatrix::spreadsheet模块显示了一个类似电子表格的初始网格。我的电子表格按程序称为$ss。在显示第一个电子表格之前,使用 $ss->pack('forget'); 现在的脚本还添加了$mw->pack('forget'),但这不是必需的 我的问题是,如何从“文件->打开”对话框中打开第二个文件,并清除显示的第一个文件,就像第一个文件清除初始网格一样?现在,第二个文件在仍然显示的第一个电子表格下面显示为一个完整的

用Perl编写多线程TCP服务器守护进程是个坏主意吗?

用Perl编写多线程程序(特别是TCP服务器守护进程)是个坏主意吗?我不知道我会说这是个坏主意,但我想说,在处理需要多线程的问题域时,有更好的选择 在我看来,更好的选择是C/C++,但根据您的技能和使用这些语言的经验,您可能会发现编写它很困难/很耗时。我的建议是用Perl编写(我假设这是您根据问题选择的语言),如果出现问题或您有性能问题,请考虑将代码转移到类似C/C++的地方 这取决于您使用的Perl版本和所使用的操作系统。请参见。继续,使用ithreads用Perl编写服务器。如果复制解释器成

如何在Perl中将十六进制字符串转换为数字?

我最近写了一个脚本,它解析单个二进制字节月份字段的文本表示形式 (不要问:-{) 在摆弄了一段时间sprintf之后,我放弃了,做了这个 our %months = qw / x01 1 x02 2 x03 3 x04 4 x05 5 x06 6 x07 7 x08 8 x09 9 x0a 10 x0b 11 x0c 12

如何使用Perl在具有特定名称模式的目录下列出文件?

我有一个目录/var/spool,其中有一个名为 a b c d e f g h i j k l m n o p q r s t u v x y z 等等 我需要这些文件,然后打开每个单独的文件修改头和正文。这部分我已经有了,但我需要第一部分 我正在尝试: dir = "/var/spool"; opendir ( DIR, $dir ) || die "No pude abrir el directorio $dirname\n"; while( (

Perl 如何将汉字逐个拆分?

如果firstname和lastname之间没有特殊字符(如空格,:等) 那么如何拆分下面的汉字 use strict; use warnings; use Data::Dumper; my $fh = \*DATA; my $fname; # 小三; my $lname; # 张 ; while(my $name = <$fh>) { $name =~ ??? ; print $fname"/n"; print $lname; } __

Perl 如何计算字符串中的shell变量?

在我的Perl脚本中,我得到可能包含环境变量的文件路径字符串,例如$FONTS/test.ttf或$TMP/file.txt 我现在想像这样打开这些文件: open my $handle, "<$filename" or die $!; 打开我的$handle,”如果设置了环境变量,则可以使用简单的替换: $filename =~ s/\$(\w+)/$ENV{$1}/g; 下面的内容要详细得多,但是 似乎正确处理了$FOO和${FOO}语法 #!/usr/bin/env perl

Perl评测中的核心:匹配(操作码)子例程是什么?

我以前用Perl编写了一些实用程序,现在我正在重写它们,以便提供一些新的/更好的特性。然而,事情的进展似乎比原来的实用程序慢得多,所以我决定用NYTProf分析器运行一个。顺便说一句,伟大的剖析器,仍然试图找出它所有有用的功能 不管怎样,我的程序93%的时间都花在调用GeneModel::CORE:match(操作码)子例程上,我不知道这是什么。大多数谷歌点击指向其他人发布的NYTProf个人资料。我确实编写了GeneModelclass/package,但我不知道这个子例程是什么,为什么调用了

Perl 当我使用警告pragma时,如何找出启用了哪种警告?

是否有一个命令或变量向我显示使用警告pragma时启用的所有不同警告?运行: perldoc perldiag 输出开始: 名称 帕尔迪亚格− 各种Perl诊断 描述 这些消息分类如下(按绝望的递增顺序列出): (W)警告(可选)。 (D)弃用(可选)。 (S)严重警告(默认启用)。 (F)致命错误(可捕获)。 (P)您永远不会看到的内部错误(可捕获)。 (X)一个非常致命的错误(不可修复)。 (A)外来错误消息(不是由Perl生成的)。 上述前三种分类(W、D和S)中的大多数消息都可以使用“

Perl 未初始化哈希键的默认值

与Perl一样,如果哈希键未初始化,那么如果执行以下代码 $hash{$key} =~ $hash{$key}++ 然后,该特定键的值增加到1(因为,它首先是未定义的,然后根据上下文,这里是numaical…它将值增加到0…将其增加到1) 我的问题是,C#的情况是否也遵循同样的概念?我的意思是,如果我用c#执行上面的代码,结果会是什么?是1还是什么 有什么想法吗 谢谢, 拉胡尔哎呀!!!很抱歉我得到了它;实际上,提到的Perl代码是为了检查/确认特定的“键”是否存在。。。或者诸如此类 所以,在

是否可以在emacs中突出显示插入的perl变量?

最近我开始使用emacs,在克服了使cperl模式以一种令人满意的方式运行的许多障碍之后,我被这个问题难住了。目前,我已经突出显示了所有常规使用的标量,除了插值的地方。在这种模式下,这样的语法高亮显示是可能的吗?目前我使用的是emacs 23.1和jrockway的cperl模式5.23 谢谢它不会突出显示字符串中的插值变量,但会在正则表达式中突出显示。我敢打赌,认识elisp的人可能会改编

Perl Unix连接两个以上的文件

我有三个文件,每个文件都有一个ID和一个值 sdt5z@fir-s:~/test$ ls a.txt b.txt c.txt sdt5z@fir-s:~/test$ cat a.txt id1 1 id2 2 id3 3 sdt5z@fir-s:~/test$ cat b.txt id1 4 id2 5 id3 6 sdt5z@fir-s:~/test$ cat c.txt id1 7 id2 8 id3 9 我想创建一个如下所示的文件 id1 1 4 7 id2 2 5 8 id3

理解一个简单的Perl构造

作为一名非Perl程序员,我想确定我已经很好地理解了一个将要移植到Python的结构 使用时: if (s/^([$PChar])(.)/$2/) { print $1,"\n"; $finished = 0; } $1、$2等与正则表达式匹配 s/搜索/替换为/ 我真正不确定的是,匹配/替换是否在打印$1之前完成?它是在当前缓冲区(即$F,即$uu逐行读取,在其空格字符上拆分)内“就地”完成的吗?它正在改变它(因此,如果我理解清楚的话,([$PChar]),当字符串的@开头在上述

Perl:如何拆分

我的代码如下: VAR DS 0D DC AL1(045),AL2(286),AL2(117),AL2(290) 我需要拆分此文件并按以下2种格式推送到我的输出文件 format1: VAR DS 0D DC AL1(045) DC AL2(286) DC AL2(117) DC AL2(290) format2: VAR D F1 A 045 F2 A 286 F3 A 117 F4 A 290 如何使用Perl执行此操作

Perl将参数传递到eval

我在使用eval函数时遇到了一个问题 实际上,我在SQL数据库中有一些函数名,我的目标是在perl中执行这些函数(在SQL中检索之后) 考虑到$RssSource->{$k}{procedure}包含“&test”作为从SQL检索的字符串,我正在做的就是这样: my $str2 = "ABCD"; eval "$RssSource->{$k}{Proceed}";warn if $@; sub test { my $arg = shift; print "fct TEST

Perl在Unix根目录中打开

是否无法使用Perl open在Unix根目录(“/”)中打开文件进行写入?只要您具有文件系统的适当权限,就可以打开任何文件 如果打开失败,则$将包含原因。只要您拥有文件系统的适当权限,就可以打开任何文件 如果打开失败,则$将包含原因。肯定不是不可能的。为了添加更多的上下文,我相信Unix/Linux系统根目录中的大多数文件在默认情况下只能由根用户写入。因此,除非您在“/”中有属于其他用户的文件,否则您的perl脚本可能必须以root用户身份运行。肯定不是不可能的。为了添加更多的上下文,我相信U

Perl 为什么DBI';s do方法返回“;0E0“;如果零行受到影响?

我在运行类似以下示例的代码时遇到问题: my $rows = $dbh->do('UPDATE table SET deleted=NOW() WHERE id=?', undef, $id) or die $dbh->errstr; if (!$rows) { # do something else } 由于do的状态返回受影响的行数,因此我认为这是可行的 准备并执行一条语句。返回行数 错误时受影响或未定义。返回值-1表示 行未知、不适用或不可用 事实证明,我错了。当我

在Perl中有条件地推送到2个数组中的1个

有更好的方法吗?我试图基于标量的值构建2个数组: my (@x, @y); my $r = [$v1, $v2, $v3]; push @x, $r if $s eq 'YES'; push @y, $r if $s ne 'YES'; 我尝试使用: push $s eq 'YES' ? @x : @y, $r; 有没有帕伦斯,但没有去 错误是: Type of arg 1 to push must be array (not null operation) at comp_report.p

Perl-如何创建用户可以在控制台中输入的命令?

我刚刚开始学习Perl,我非常喜欢它。我正在编写一些基本函数,但我真正希望能够使用控制台命令智能地使用这些函数。例如,假设我有一个函数,将两个数字相加。我希望能够在控制台中键入“add2,4”并读取第一个单词,然后将这两个数字作为参数传递给“add”函数。本质上,我在使用Perl^^创建一些基本脚本方面寻求帮助 关于如何在VB中实现这一点,我有一些模糊的想法,但是Perl,我不知道从哪里开始,或者什么函数对我有用。是否有类似VB.net的“拆分”函数的功能,可以将标量的内容分解为数组?例如,有没

无法理解以下Perl语法

我是第一个使用Perl的人,我必须对Perl脚本进行更改,我遇到了以下问题: my %summary ; for my $id ( keys %trades ) { my ( $sym, $isin, $side, $type, $usrOrdrNum, $qty ) = @{$trades{$id}} ; $type = "$side $type" ; $summary{$sym}{$type} += $qty ; $summary{$sym}{'ISIN'}

如何";使用「;perl mason中的另一个模块?

在常规perl脚本中,您可以编写 使用Foo::Crypt::Employee qw(Foo) 在文件顶部,在脚本的其余部分使用foo子例程 如何在perl mason文件中执行此操作?我将把这样一行代码放在哪里?请参见HTML::mason文档。块看起来是最好的位置不起作用这是哪一版本的mason,1还是2?@nosretap是的。“不起作用”不是一个有用的问题报告。

是否可以使用Log4perl创建每个用户的日志文件?

我有一个非常有趣的web应用程序,它使用Log4perl进行日志记录。它是一个多用户应用程序,当多个用户访问应用程序时,有时很难跟踪日志文件中的各个线程。我想做的是将每个用户(用户总数不到25个)的活动记录到一个单独的文件中。例如../log/userX.log./log/userY.log等 我考虑在配置文件中使用类似的内容: log4perl.appender.MAIN.filename=sub{return get_user_filename();} 但是记录器是在mojolicous启动

Perl 如何将数组传递给函数并返回值

下面是我正在处理的一段较大代码的代码片段,在我尝试引用函数@$instanceObjectEnrichment[0]中的数组时,不断出现此错误 my @providerCloudEnrichment=("Core","Gen-i WAN Services","Physical Provider Connectivity","TEMPLATE"); createAndEnrichInstance($parentClass,$session,$object,@providerCloudEnrichm

perl Digest add addfile计算不同的SHA1摘要

perlDigest模块为add和addfile函数计算不同的SHA1摘要。 我使用/dev/uradom 在ubuntu上运行 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 12.04.1 LTS Release: 12.04 Codename: precise $ perl -v This is perl 5, version

PERL for循环中$的下一个元素是什么

我想比较循环的两个连续元素 @arr=qw(1 2 3 3 4); foreach(@arr) { if($_ == $_+1) { print "yes"; } } 在这种情况下,我应该使用什么来代替$uu1呢?我会用简单的老式C方式: for( my $i=0; $i<@arr-1; $i++ ){ if( $arr[$i] == $arr[$i+1] ){ print "yes\n"; } } 我会用简单的老C方式: for( my $i=0;

';分叉深度';有价值'-2';运行nytprof perl探查器时出现错误消息

尽管如此,我将变量NYTPROF设置为“forkdepth:1”,当我尝试NYTPROFF合并我的分叉子代及其父代的探查器输出时,我收到一条消息说: 阅读nytprof.13232.out.21321 选项“forkdepth”在nytprof.13232.out.21321中的值为“-2”,与之前的值“-1”不同;这意味着配置文件不一致,从而导致垃圾结果 有人知道修复方法或者为什么会发生这种情况吗 我猜这是nytprofmerge中的一个bug,可以忽略。 请随意。(一个复制问题的小脚本会非常

用Perl快速到达当地时间YYYY-mm-dd HH:mm:SS?

我想获取本地时间,格式为YYYY-mm-dd HH:mm:SS(比如2009-11-29 14:28:29)。, 如何以这种格式获取日期YYYY mm dd HH:mm:SS 我试过了 my $format = "%4u-%02u-%02u %02u:%02u:%02u"; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime; printf "$format\n", $year+1900, $mon+1, $m

Perl Win32::GUI更新托盘图标不工作

托盘图标不会更改。原因可能是什么? 我使用的是最新的草莓Perl v5.20.2 x86、Win32::GUI v1.11、Windows 7 x64 use strict; use warnings; use Win32::GUI; my $main = Win32::GUI::Window->new( -name => 'Main', -text => 'Perl', -width => 200, -height => 200 ); my $icon =

Perl";内存不足&引用;处理大批量作业时

我和其他一些人现在是一些用Perl编写的遗留批处理作业的愉快维护者。大约3万行代码,分为10-15个Perl文件 为了改进批处理过程的工作方式,我们有很多长期的解决方案,但在短期内,我们必须为依赖于这些批处理作业输出的各种其他项目亮起灯 这些批处理作业的主要部分的核心是一个散列,它装载了从一堆目录中的各种数据文件收集的一堆数据。在第一次编写这些文件时,所有内容都很好地存储在内存中——不超过100MB左右。当然,随着时间的推移,事情在不断发展,散列现在已经发展到了box可以处理的大小(8GB),这

Perl关键字say在版本5.14.4中不起作用

我的Perl版本是5.14.4,但是函数say不起作用。可能有什么问题?出于向后兼容的原因,默认情况下它不可用。你可以用 CORE::say(...); # Requires Perl 5.16. 但最好添加以下内容之一: use feature qw( say ); # Requires Perl 5.10. use v5.10; # All 5.10 features including "say". use 5.010;

Perl 多次接收HTTP数据

我正在编写一个自定义HTTP服务器来为我自己的JavaScript应用程序提供服务 使用此代码从浏览器获取标题非常简单 $data_length = 0; $client_data = ""; while ( <$client_socket> ) { if ( /Content-Length: (\d+)/ ) { $data_length = $1; } $client_data .= $_; last if ( $_ =~ /

为什么不';运行“plenv local system”后Perl命令是否工作?

在CentOS 6.5机器上,我通过plenv安装了两个perl版本 当我运行Perl5.8.8时,我可以在shell中很好地运行任何perl命令,例如 plenv local 5.8.8 perl -e "print 'hello';" hello 但当我切换到别名“系统” 该命令不会执行,并输入新行,就好像perl命令正在等待输入一样。Ctrl-D也不会结束输入 所以我的问题是 这是一种旧的perl行为吗 如何检查别名perl的版本?(键入perl-v不会执行,如上所述) 更新: 注释

Perl 为什么不';t如果不使用';你不能播下种子吗?

在srand的文档中,它说: 另一种情况是,您可能希望在“fork”之后调用“srand”,以避免子进程与父进程共享相同的种子值(因此彼此共享) 我可以发誓我从来没有遇到过这个,所以我测试了它: $ perl -E 'for (1 .. 8) { next if fork; say rand; exit;} wait for 1 .. 8' 0.301967407417582 0.497966311014356 0.05798998109913 0.907357103963481 0.24049

Perl 在foreach中调用的子中使用外部范围中的变量

我在用cygwin。 这个脚本的作用是将我加载到桌面上的一个目录中的iphone图片加载。 它在图像查看器中打开,让我看一看图片 system("cygstart $dirname/$oldfile") ; 然后它给了我重命名图片的选项。但是它抛出了错误,并且没有重命名图片 Use of uninitialized value $oldfile in concatenation (.) or string at ./rename_image.pl line 29, <STDIN>

Perl 如何在创建对象时初始化特定的类变量?

到目前为止,我一直依赖于类中变量的顺序,但现在我尝试以无序顺序初始化这些变量 例如,这是我在创建对象时通常做的事情 my$person1=Person->new('Fernando','Alonso',36); 这就是我想要实现的 my$person2=Person->new(年龄=>36岁,名字=>'Fernando',姓氏=>'Alonso'); 我尝试了=>关于我看到的几个文档(例如),但它们没有向我返回完整的示例。然而,我实际上并没有在下面的脚本上工作,这是一个带有“陈词滥调”包Pe

Perl Exporter在子类中使用@EXPORT\u OK中的变量

我已经找了几个小时了,我被难住了 我确实看到了,但它没有回答我的问题 我正在尝试编写一个实用程序模块(目前的测试目的)用于内部开发的脚本。但我似乎很难让出口商真正出口我需要的东西 我所拥有的如下: lib/Internal.pm: package Internal; use 5.008_008; use strict; use warnings; use Exporter; our $VERSION = 1; our @EXPORT_OK = qw($EMPT

Perl 贝宝模块的问题

是否有人尝试过此模块NET::PayPal 因为我试过了,我发现了这个错误 授权失败:401未经授权,{“错误”:“无效的客户端”,“错误描述”:“客户端身份验证失败”} 我正在使用有效的客户端id和机密id use Net::PayPal; $client_id = 'asdasdasdasdsadasdasd'; $client_secret = 'sadasdasdsadasdsad'; my $p = Net::PayPal->new($client_id, $clien

Perl脚本grep for always阻止并打印指定行

我需要获取文件,逐行读取并搜索always\u ff块。 如果始终\u ff存在,那么我需要从查找到的始终\u ff块内部打印特定行 使用严格; 使用警告; 对于我的$file(“*.sv”) { 打开我的$fh,“您可能应该使用范围运算符,并使用与本节开头和结尾匹配的模式。查看您的输入数据,我建议: 开始:匹配“always\u ff”加上空白,即/always\u ff\s+/ 结束:空行,即/^\s*$/ 在块中:打印带有赋值的行,即/您可能应该使用范围运算符,其模式与节的开头和结尾相匹

如何在头http for perl中传递模糊逻辑?

我想使用perl模糊http参数,如何做到这一点,请查看我的子代码 我尝试过使用head的方法,但我遇到了错误 代码从第620行到第624行 sub print_fuzz_methods( ) { my $ua = LWP::UserAgent->new; $ua->agent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0."); print color("BOLD RED"), "

Perl与backticks-我不理解backticks中的操作

我是perl新手。在下面的背景中发生了什么 $selfext和$banner是先前定义的。下面的语句是在Linux中执行的,我不明白banner函数是从哪里来的?当我打印$\uuuz时,我得到一个空字符串 $_=`banner $selfext $banner`; 这是正在执行横幅命令的banner是一个普通的UNIX程序,类似于uniq、sort甚至perl本身,也就是说,这不是一些perl函数。但它并不是安装在所有系统上(与perl相同),因此执行可能会失败。有关详细信息,请参见。这是正在

在perl中根据标题对CSV列值进行排序

我有一个包含350个字段的大型csv文件。标题和值应根据另一个csv文件中的标题进行排列 为了在较小的箱子上试用,我有以下代码- 引用头{A B C D} use File::Basename; use Array::Utils qw(:all); use Text::CSV; my @headers = qw(A B C D); my $csv_in = Text::CSV->new({binary => 1, auto_diag => 1}); my $csv_out =

是否可以使用perl将鼠标光标移动到xvfb虚拟显示器上?

我被指示尝试做一个小的概念证明。为了让它工作,我需要能够将鼠标移动到xvfb生成的虚拟显示器上。这可能吗?我似乎找不到任何方法将鼠标放到虚拟屏幕上,因为它并没有真正“连接”到其他屏幕 我正在使用一个perl脚本来自动化一些鼠标移动,因此最终目标是让我的脚本将鼠标移动到该屏幕上,但我怀疑第一步是将鼠标移动到xvfb屏幕上,然后从那里了解如何使用perl自动化该操作 编辑:如果重要的话,我在RHEL 编辑2:另外,我正在使用X11::GUITest如果您使用TK有一个模块供您执行此操作: 您能否澄清

Perl 使用PPI重写包中的子例程

有没有一种方法可以使用PPI框架重写子例程的内容 示例(精简至要点): my$Document=PPI::Document->new($file); my$subs=$Document->find(sub{$\[1]->isa('PPI::Statement::sub')和$\[1]->name}); foreach my$sub(@{$subs}){ 如果($sub->block()){ #这里:如果block()(子模块的实际代码)满足某些条件, #我想用f.e.“返回-1”来代替它; }

  1    2   3   4   5   6  ... 下一页 最后一页 共 352 页