小编rjh*_*rjh的帖子

为什么在这个Perl正则表达式中,`\ s +`比`\ s\s*`快得多?

为什么更换\s*(或甚至\s\s*)\s+导致此输入的加速?

use Benchmark qw(:all);
$x=(" " x 100000) . "_\n";
$count = 100;
timethese($count, {
    '/\s\s*\n/' => sub { $x =~ /\s\s*\n/ },
    '/\s+\n/' => sub { $x =~ /\s+\n/ },
});
Run Code Online (Sandbox Code Playgroud)

链接到在线版本

我注意到s/\s*\n\s*/\n/g我的代码中有一个缓慢的正则表达式- 当给出一个450KB的输入文件,其中包含大量空格,其中有一些非空格,最后一个换行符 - 正则表达式挂起并且从未完成.

我直观地取代了正则表达式,s/\s+\n/\n/g; s/\n\s+/\n/g;一切都很顺利.

但为什么它这么快?使用后re Debug => "EXECUTE"我注意到\s+版本以某种方式优化,只在一次迭代中运行:http://pastebin.com/0Ug6xPiQ

Matching REx "\s*\n" against "       _%n"
Matching stclass ANYOF{i}[\x09\x0a\x0c\x0d ][{non-utf8-latin1-all}{unicode_all}] against "       _%n" (9 bytes)
   0 <> <       _%n>         | …
Run Code Online (Sandbox Code Playgroud)

regex perl regex-greedy

56
推荐指数
4
解决办法
3943
查看次数

检查Perl函数参数值得吗?

有很多关于MooseX :: Method :: Signatures的讨论,甚至在此之前,像Params :: Validate这样的模块设计用于检查方法或函数的每个参数.我正在考虑使用前者用于我未来的所有Perl代码,无论是个人还是我的工作地点.但我不确定这是否值得付出努力.

我正在考虑我之前看过(和写过)的所有Perl代码,之后不执行此类检查.我很少看到一个模块这样做:

my ($a, $b) = @_;
defined $a or croak '$a must be defined!';
!ref $a or croak '$a must be a scalar!";
...
@_ == 2 or croak "Too many arguments!";
Run Code Online (Sandbox Code Playgroud)

也许是因为没有某种辅助模块它只是太多的工作,但也许是因为在实践中我们不会向函数发送过多的参数,而且我们不会将arrayref发送到期望标量的方法 - 或者如果我们这样做,我们就会use warnings;和我们很快就听到了 - 鸭子打字的方法.

那么Perl类型的检查是否值得追求性能,或者它的优势主要体现在编译的强类型语言(如C或Java)中?

我对任何有使用这些模块并且已经看到使用它们的好处(或没有)的Perl编写经验的人的答案感兴趣; 如果您的公司/项目有任何与类型检查有关的政策; 以及类型检查和性能方面的任何问题.

更新:我最近读了一篇关于这个主题的有趣文章,称为强测试与强打字.忽略轻微的Python偏见,它实质上表明在某些情况下类型检查可能会令人窒息,即使您的程序通过了类型检查,也无法保证正确性 - 正确的测试是唯一可靠的方法.

perl performance types moose typechecking

18
推荐指数
3
解决办法
3500
查看次数

工作时如何用git强制使用CVS游击VC?

我的工作地点目前使用CVS.计划进行git迁移,但可能需要很长时间.与此同时,我有一个单人项目,并决定使用git进行个人开发.分支,上演提交,变基等等都非常棒!但不幸的是,在某些时候,这个项目及其历史需要导入CVS,以便其他人可以检查我的进度.

什么是最好的方式......

  • 将当前项目(最好是作为一组单独的提交/修订)导入CVS
  • 允许将可更改的未来更改导入CVS
  • (奖金问题 - 理想但不是必需的)将其他开发人员的任何CVS更改合并到git中

如果重要的话,目前CVS中没有任何内容.(如果我按照自己的方式在CVS中没有任何东西,但我现在已经坚持了!)提前感谢!

migration git cvs git-cvs

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

有没有办法阻止用户在本地保存文档?

如果用户在我的网站上查看文档(例如代表某些机密信息的pdf文件),我是否可以阻止他们在本地保存文档?

pdf persistence

6
推荐指数
2
解决办法
2105
查看次数

如何运行perl xt测试?

最近,新的伟大事物出现在Perl世界中.在库包中很长一段时间都有t包含测试的文件夹.现在还有一个xt包含作者测试的文件夹.在xt不需要库安装过程中的测试,但它可以帮助图书馆作者日期,以确保该代码是巨大的.

有一个prove与Perl一起运行测试的spript .如果prove没有参数运行 ,将执行文件夹't'中的所有测试.如果你想同时运行txt测试你应该写:

prove xt t
Run Code Online (Sandbox Code Playgroud)

它可以向配置文件.proverc文件添加参数(xt t).然后,当您在prove没有参数的情况下运行时,它们将从文件中获取,并且将执行两个文件夹中的测试.

但问题来了.如果你xt t.proverc文件中有文件,你不能只将文件名作为参数传递给prove.如果你说 prove t/00-load.t它将执行两个文件夹中的所有测试,因为它从配置文件中获取参数.你需要写prove --norc t/00-load.t.但这看起来很难看.

你如何运行xt测试?

perl xt perl-prove

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

无法完全删除git存储库

我一直在windows-msysgit上使用git.每当我尝试使用资源管理器或使用时完全删除存储库

$ git rm -rf ptp/
fatal: Not a git repository (or any of the parent directories): .git
Run Code Online (Sandbox Code Playgroud)

它出错"重新分析点缓冲区中存在的数据无效"或上面的致命错误.

我/ git有什么问题?

提前致谢

windows git git-remote

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

LINQ查询 - null日期

我有一个简单的linq查询返回带有空日期字段的记录,只想检查"where"行的synatx是否正常

var query2 =来自db.tblCases中的cs,其中cs.date_closed == null等等,

再次感谢

DD

linq

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