关于perl:为什么Python使用者远远大于perl

不认为 两者 的语法差别是造成如此场面的次要起因.perl的语法尽管比拟特立独行, 但也不是很难. 总结如下起因: library(或者叫package)的应用如果是本语言原生的library, 那没有问题. 如果是须要调用内部函数/过程的package的话, 那么就会有微小的差别. python是预编译而后从pypi上下载 python(pip)将package下载到本地 而后解压后将package内容装置到不同的指定目录perl是代码下载到本机后本机编译 须要在本机上安装c编译器, linker, pkconfig, 以及依赖的动静库... 构建之后, 再将构建生成物装置到不同的指定目录比方: PyQT/PySide装置后,会有一些动态链接库(*.so/*.dll/*.pyd)呈现在site-packages/pyqt5/的目录里. 能够证实python的package是all in one型. 从为数不多的Perl理论应用来看,本机编译比拟艰难,要装置许许多多的开发工具和辅助工具,常常遇到某某软件缺失问题,有时还会遇到莫名的编译失败 装置失败,不如python间接将编译好的动态链接库下载到指定地位,也不须要额定装置c/haskell/Ada或者什么语言的编译/构建环境,大大降低了入门的难度与所需常识储备(目前看来这是许多新畛域抉择python 而不是perl的重要起因。毕竟熟练掌握c程序的构建须要很多很多的常识储备, 一旦呈现装置问题 小白就抓瞎)。 所以心愿Perl社区认真改良这个问题(像python一样提供编译好的package), 进步应用体验. 不过,perl社区都是大牛, 可能不会呈现这种根底问题, 天然也意识不到 面对对象能力python perl都有一点面对对象能力。Perl的OO语法比拟怪异(而且有不同期间的不同实现). python的OO语法比拟正统(靠近c++ java c#这类OO支流), 学习起来比拟容易. 支流惯性因为长期将精力专一于Raku(以前的perl 6), perl社区错过了web2.0, 大数据, 人工智能 这些新热点. 造成在这些畛域衰亡之后, 抉择的次要语言是python, 新退出的学习者天然追随支流. 在生物信息 数据挖掘这些畛域, 因为畛域惯性, perl还是支流语言.

March 24, 2023 · 1 min · jiezi

关于perl:vim中perl与python处理文本的性能比较

终于想起账号-_-!! vim中perl与python解决文本的性能比拟又是一天不务正业, 本想把手上的小我的项目推进一步的,后果却迷失在了 如何给vim 加上XXX HACK NOTE等标签高亮显示上为了hack todo-vim 插件(大小字查找问题), 又花了大量工夫在vimscript+内置perl 交互上 在[2.]这步, 查到一篇也是很有帮忙的一篇 用vim解决巨量数据的文章. 其中有python也有perl也有vimscript,通过他的实际, python比perl(在vIM里)解决文本快得多.作为python / perl 双修修士, 有点不服气, 认为不可能有3倍差距.因而,也花了工夫重做了一遍benchmark 详情1. 生成测试用文件perl -e 'open my $f,">","test.txt"; for($i=0;$i<100000;$++) { print $f "\"value\"\n{\n \"wave\"\n \"wave\"\n \"wave\"\n \"wave\"\n}\n\n";}'文件 879992行, 6269943字节 2. 编写vim代码内容如下 function! test#pythonmod1() " 无正则 形式 let start_time = localtime() echo("开始解决...")python3 << EOFimport vim, revimBuffer = vim.current.buffernum = 0c = 0l = 0while l < len(vimBuffer): if vimBuffer[l] == '"value"': num = 0 elif vimBuffer[l] == ' "wave"': vimBuffer[l] = ' "wave' + str(num) + '"' c += 1 num += 1 l += 1vim.command("let c=" + str(c))EOF"redraw!echo("实现!\n共替换 " . c ." 行\n耗时:" . (localtime()-start_time) . " 秒")endfunctionfunction! test#pythonmod() " 正则版本 let start_time = localtime() echo("开始解决...")python3 << EOFimport vim, revimBuffer = vim.current.buffernum = 0c = 0l = 0p_value = re.compile(".*value.*")p_wave = re.compile(".*wave.*")while l < len(vimBuffer): if p_value.match(vimBuffer[l]): num = 0 elif p_wave.match(vimBuffer[l]): vimBuffer[l] = ' "wave' + str(num) + '"' c += 1 num += 1 l += 1vim.command("let c=" + str(c))EOF"redraw!echo("实现!\n共替换 " . c ." 行\n耗时:" . (localtime()-start_time) . " 秒")endfunctionfunction! test#perlmod1() " 无正则版本 let start_time = localtime() echo("开始解决...")perl << EOF $lnum = 1; $num = 0; $c = 0; while ($lnum <= $curbuf->Count()) { if ($curbuf->Get($lnum) eq ' "value"') { $num = 0; } elsif ($curbuf->Get($lnum) =~ ' "wave"') { $curbuf->Set($lnum, ' "wave' . $num . '"'); $c += 1; $num += 1; } $lnum += 1 } VIM::DoCommand("let c=" . $c);EOF"redraw!echo("实现!\n共替换 " . c ." 行\n耗时:" . (localtime()-start_time) . " 秒")endfunctionfunction! test#perlmod() " 正则版本 let start_time = localtime() echo("开始解决...")perl << EOF $lnum = 1; $num = 0; $c = 0; while ($lnum <= $curbuf->Count()) { if ($curbuf->Get($lnum) =~ /value/) { $num = 0; } elsif ($curbuf->Get($lnum) =~ /wave/) { $curbuf->Set($lnum, ' "wave' . $num . '"'); $c += 1; $num += 1; } $lnum += 1 } VIM::DoCommand("let c=" . $c);EOF"redraw!echo("实现!\n共替换 " . c ." 行\n耗时:" . (localtime()-start_time) . " 秒")endfunction因为无奈应用python2版本, vim只能运行python3python版本 ...

March 16, 2023 · 2 min · jiezi