为什么更换\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) 有很多关于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偏见,它实质上表明在某些情况下类型检查可能会令人窒息,即使您的程序通过了类型检查,也无法保证正确性 - 正确的测试是唯一可靠的方法.
我的工作地点目前使用CVS.计划进行git迁移,但可能需要很长时间.与此同时,我有一个单人项目,并决定使用git进行个人开发.分支,上演提交,变基等等都非常棒!但不幸的是,在某些时候,这个项目及其历史需要导入CVS,以便其他人可以检查我的进度.
什么是最好的方式......
如果重要的话,目前CVS中没有任何内容.(如果我按照自己的方式在CVS中没有任何东西,但我现在已经坚持了!)提前感谢!
如果用户在我的网站上查看文档(例如代表某些机密信息的pdf文件),我是否可以阻止他们在本地保存文档?
最近,新的伟大事物出现在Perl世界中.在库包中很长一段时间都有t
包含测试的文件夹.现在还有一个xt
包含作者测试的文件夹.在xt
不需要库安装过程中的测试,但它可以帮助图书馆作者日期,以确保该代码是巨大的.
有一个prove
与Perl一起运行测试的spript .如果prove
没有参数运行
,将执行文件夹't'中的所有测试.如果你想同时运行t
并xt
测试你应该写:
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
测试?
我一直在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有什么问题?
提前致谢
我有一个简单的linq查询返回带有空日期字段的记录,只想检查"where"行的synatx是否正常
var query2 =来自db.tblCases中的cs,其中cs.date_closed == null等等,
再次感谢
DD
perl ×3
git ×2
cvs ×1
git-cvs ×1
git-remote ×1
linq ×1
migration ×1
moose ×1
pdf ×1
performance ×1
perl-prove ×1
persistence ×1
regex ×1
regex-greedy ×1
typechecking ×1
types ×1
windows ×1
xt ×1