Tag: perl

文字处理 – python vs perl的性能

这里是我的perl和python脚本,从约21个日志文件中进行一些简单的文本处理,每个文件大约300KB到1MB(最多)×5次重复(总共125个文件,由于日志重复5次)。 Python代码 (代码修改为使用编译的re和使​​用re.I) #!/usr/bin/python import re import fileinput exists_re = re.compile(r'^(.*?) INFO.*Such a record already exists', re.I) location_re = re.compile(r'^AwbLocation (.*?) insert into', re.I) for line in fileinput.input(): fn = fileinput.filename() currline = line.rstrip() mprev = exists_re.search(currline) if(mprev): xlogtime = mprev.group(1) mcurr = location_re.search(currline) if(mcurr): print fn, xlogtime, mcurr.group(1) Perl代码 #!/usr/bin/perl while (<>) { chomp; […]

是否有任何用于Bash脚本?

我刚刚完成大学二年级学生的第二年,所以缺乏“现实世界”的知识。 我第一年就学习了Java,继续使用Java,第二次学习了C语言和简单的Bash脚本。 今年夏天,我正在努力学习Perl(上帝帮助我)。 过去我已经涉猎了Python。 我的问题是,现在我们有非常可读的,非常可写的脚本语言,如Python,Ruby,Perl等,为什么有人写Bash脚本? 有什么我失踪? 我知道我的Linux机器有perl和python。 他们是不是无处不在? Bash中有没有比在其他一些地方更容易做到的事情?

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

可用的cpan模块有多个安装程序; 我知道至lessCPAN.pm(自带Perl),CPANPLUS和cpanminus。 三者有什么区别? 什么情况下需要使用一个? 有其他模块安装程序,我应该知道吗?

Python慢​​读性能问题

在更早的线程之后,我把问题归结为它的基本原理,在从Perl脚本迁移到Python脚本的过程中,发现了一个巨大的性能问题。 在Ubuntu服务器上运行这个。 注意:这不是一个X对Y线程,我需要从根本上知道,如果这是如何,或者如果我做一些愚蠢的事情。 我创build了我的testing数据,50,000个10kb的文件(这反映了我正在处理的平均文件大小): mkdir 1 cd 1 for i in {1..50000}; do dd if=/dev/zero of=$i.xml bs=1 count=10000; done cd .. cp -r 1 2 创build我的2脚本尽可能简单: Perl的 foreach my $file (<$ARGV[0]/*.xml>){ my $fh; open($fh, "< $file"); my $contents = do { local $/; <$fh> }; close($fh); } python import glob, sys for file in glob.iglob(sys.argv[1] […]

Perl 5.20和智能匹配和给定时间的命运?

我刚刚安装了Perl 5.18,我得到了很多这样的警告, given is experimental at .\[…].pl line […]. when is experimental at .\[…].pl line […]. Smartmatch is experimental at C:/strawberry/perl/site/lib/[…] line […]. 研究这些警告 – 我从来没有听说过任何地方 – 我只能在两个地方find这个警告, perldelta为5.18 ,这只是真的提到说,该function已被降级为实验 ? 这个nntp.perl.org的post Perl Delta对于这些特性发生了什么事情仍然是最有说服力的,它已经被埋在了pod中, 智能匹配,在v5.10.0中添加,并在v5.10.1中进行了重大修改,一直是一个常见的投诉点。 虽然有很多方法是有用的,但对于Perl的用户和实现者来说,它也被certificate是有问题和困惑的。 关于如何最好地解决这个问题已经有了一些build议。 很明显,智能匹配几乎肯定要么改变,要么将在未来消失。 不build议依靠其目前的行为。 当parsing器看到~~,给定或什么时候,警告将被发出。 我很困惑Perl在过去10年中最重大的变化如何被拉扯。 我已经开始使用given , when和smartmatch到处。 有关于这些未来的更多信息吗? 有谁发现他们“困惑?” 这些function如何可能改变? 是否有计划用模块实现这些function?

我如何在Perl中进行unit testing?

我一直在做一些OO的Perl编程,我想知道:哪个是进行unit testing的最好方法? 到目前为止,我一直在使用Test :: Simple模块来执行testing,但是对于我想要的,感觉不够。 你能指出我一些很好的模块吗?

使用'使用utf8' 给我“宽印字”

如果我运行下面的Perl程序: perl -e 'use utf8; print "鸡\n";' 我得到这个警告: Wide character in print at -e line 1. 如果我运行这个Perl程序: perl -e 'print "鸡\n";' 我没有得到警告。 我认为use utf8需要在Perl脚本中使用UTF-8字符。 为什么这不起作用,我该如何解决? 我正在使用Perl 5.16.2。 我有同样的问题,如果这是在一个文件中,而不是在命令行上的单线程。

在Perl中,“0但真”意味着什么?

有人可以解释什么string“0但真”意味着在Perl中? 据我所知,它在整数比较中等于零,但在作为布尔值使用时计算为true。 它是否正确? 这是一种正常的语言行为吗?或者这是一个特殊的string在解释器中被视为一个特殊情况?

如何实现一个IMP函数,返回在运行时确定的大型结构types?

背景:CamelBones使用Objective-C运行时注册Perl类。 为此,每个Perl方法都使用相同的IMP函数进行注册; 该函数检查它的self & _cmd参数来查找要调用的Perl方法。 对于使用objc_msgSend调度的消息,这已经运行了好几年了。 但是现在我想添加从Perl方法返回浮点和大型结构types的支持。 浮点不难; 我将简单地写另一个返回double的IMP来处理使用objc_msgSend_fpret分派的消息。 问题是如何处理objc_msgSend_stret 。 为每个可能的结构返回types编写一个单独的IMP是不切实际的,原因有二:首先,因为即使我只为编译时已知的结构types这样做,这是一个荒谬的数量的函数。 其次,因为我们正在讨论一个可以与任意Objective-C和Perl代码链接的框架,所以在编译框架时,我们并不知道所有可能的结构types。 我希望做的是写一个单一的IMP ,可以处理任何通过objc_msgSend_stret调度的返回types。 我可以写它作为返回void ,并采取指针参数返回缓冲区,如旧的objc_msgSend_stret被宣布? 即使这件事现在还在继续,我可以依靠它继续在未来工作吗? 感谢您的任何build议 – 我一直在这个问题上绞尽脑汁。 🙂 更新: 下面是我从苹果的一个运行时间工程师那里得到的关于objc-language邮件列表的build议: 您必须编写汇编代码来处理这种情况。 在某些体系结构中,您的build议失败,其中“返回void作为第一个参数指向结构体的函数”的ABI不同于“函数返回结构体”。 (在i386中,结构地址是由调用者在一种情况下由被调用者popup的,另一种情况是由被调用者popup)。这就是为什么objc_msgSend_stret的原型被改变的原因。 汇编代码将捕获结构返回地址,走私它到非结构返回C函数调用,而不会干扰其余的参数,然后做退出(i386 ret $4上正确的ABI特定的清理。 或者,汇编代码可以捕获所有的参数。 转发机器做这样的事情。 如果你想看看这些技术是什么样的话,那么这个代码可能在开源的CoreFoundation中。 我会留下这个问题,以防有人对更好的想法感到头疼,但是直接来自苹果公司自己的“运行时间争吵者”,我认为这可能是一个权威的答案,我可能会得到。 有时间清除x86参考手册,并将我的汇编程序中的锈掉掉,我猜…

Nginx的variables类似于Apache中的SetEnv?

我在Apache中使用SetEnv来设置虚拟主机中的一些variables,我使用$_SERVER[the_variable]在PHP中恢复。 现在我正在切换到Perl Catalyst和Nginx,但似乎Nginx中的“env”指令是不一样的。 这是行不通的。 如何完成? 这里是背景图片,以防万一有人可以提出更好的方法,或者我以前的系统不能用于Nginx。 我为许多域使用相同的应用程序。 所有的数据来自不同的数据库,具有相同的结构。 数据库名称在该环境variables中硬编码到虚拟主机。 因为我知道数据库的名字,所以所有的查询都会从第一个查询开始到相应的数据库。 我可以有多个域使用相同的数据库,只是包括相同的variables到指令。