Questions tagged «perl»

Perl是一种过程性,高级,通用,动态编程语言,以其对正则表达式和字符串解析功能的本机支持而闻名。通常,请使用此标签来回答有关Perl的问题。对于与新的(但相关的)语言Raku(以前称为“ Perl 6”)有关的内容,请使用raku标记。对于其他语言的Perl样式正则表达式,请使用regex标记;如果基于PCRE库,则使用pcre标记。

6
Perl和PHP之间的区别[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我打算学习Perl 5,因为直到现在我都只使用PHP,所以我想对两种语言之间的差异有所了解。 当PHP作为一组“ Perl hacks”开始时,它显然克隆了一些Perls功能。 语法的主要区别是什么?真的,有了Perl,您就有更多的选择和表达方式的方式了吗? 为什么Perl不再经常用于动态网站?是什么使PHP越来越受欢迎?
101 php  perl 

8
如何对Perl CGI脚本进行故障排除?
我有一个不起作用的Perl脚本,而且我不知道如何开始缩小问题的范围。我能做什么? 注意:我添加这个问题是因为我真的很想在Stackoverflow中添加很长的答案。我在其他答案中一直保持外部链接,因此值得在这里。如果您要添加一些内容,请不要羞于编辑我的答案。
100 perl  cgi 

7
如何可靠地猜测MacRoman,CP1252,Latin1,UTF-8和ASCII之间的编码
在工作中,似乎没有一周没有编码相关的混乱,灾难或灾难。问题通常来自程序员,他们认为他们无需指定编码就可以可靠地处理“文本”文件。但是你不能。 因此,已决定从此以后禁止文件以*.txt或结尾的文件名*.text。这种想法是,这些扩展误导了随意的程序员对编码的沉闷自满,这会导致处理不当。根本没有扩展将是更好的选择,因为至少您知道自己不知道拥有什么。 但是,我们不会走那么远。相反,您将期望使用以编码结尾的文件名。因此,对于文本文件,例如,这些会是这样README.ascii,README.latin1,README.utf8,等。 对于需要特定扩展名的文件,如果可以在文件本身内部指定编码,例如在Perl或Python中,则应这样做。对于Java源之类的文件,其中文件内部没有这样的功能,您可以将编码放在扩展名之前,例如SomeClass-utf8.java。 对于输出,强烈建议使用 UTF-8 。 但是作为输入,我们需要弄清楚如何处理代码库中名为的数千个文件*.txt。我们想重命名所有这些以适应我们的新标准。但是我们不可能全神贯注。因此,我们需要一个实际起作用的库或程序。 这些格式有ASCII,ISO-8859-1,UTF-8,Microsoft CP1252或Apple MacRoman。尽管我们知道我们可以判断某些东西是否为ASCII,并且知道有某种东西可能是UTF-8还是一个不错的选择,但我们对8位编码感到困惑。因为我们在大多数台式机为Mac的混合Unix环境(Solaris,Linux,Darwin)中运行,所以我们有很多烦人的MacRoman文件。这些尤其是一个问题。 一段时间以来,我一直在寻找一种以编程方式确定 ASCII码 ISO-8859-1 CP1252 麦克罗曼 UTF-8 文件在其中,我还没有找到可以可靠地区分这三种不同的8位编码的程序或库。我们可能仅拥有一千多个MacRoman文件,因此我们使用的任何字符集检测器都必须能够将它们嗅出。我看过的东西都无法解决这个问题。我对ICU字符集检测器库寄予厚望,但它不能处理MacRoman。我也研究过模块,它们在Perl和Python中都可以做同样的事情,但是一遍又一遍地是同一回事:不支持检测MacRoman。 因此,我要寻找的是一个现有的库或程序,该库或程序可以可靠地确定文件所用的五种编码中的哪一种(最好是更多)。特别是它必须区分我引用的三种3位编码,尤其是MacRoman。文件是超过99%的英语文本;还有其他几种语言,但不是很多。 如果是库代码,则我们的语言偏好是按Perl,C,Java或Python的顺序排列。如果它只是一个程序,那么我们并不在乎它的语言是什么,只要它是完整的源代码,在Unix上运行并且完全不受限制即可。 还有其他人遇到过随机编码成千上万个旧文本文件的问题吗?如果是这样,您是如何尝试解决它的?您的成功程度如何?这是我的问题中最重要的方面,但是我也很感兴趣您是否鼓励程序员使用文件中的实际编码来命名(或重命名)他们的文件,这将有助于我们将来避免此问题。有没有人曾经尝试过在制度基础上强制执行,如果成功,那么成功与否,为什么? 是的,我完全理解,考虑到问题的性质,为什么不能保证给出确切的答案。对于小文件,尤其是这种情况,因为您没有足够的数据继续运行。幸运的是,我们的文件很少。除了随机README文件外,大多数文件的大小在50k到250k之间,许多文件更大。大小超过K的任何内容都将保证使用英语。 问题领域是生物医学文本挖掘,因此我们有时会处理大量的超大型语料库,例如PubMedCentral的所有Open Access存储库。一个相当大的文件是BioThesaurus 6.0,容量为5.7 GB。该文件特别令人讨厌,因为它几乎都是UTF-8。但是,我相信有些numbskull会以一些8位编码插入其中的几行,即Microsoft CP1252。您需要花费相当长的时间才能踏上那个旅程。:(

11
我应该在Windows上使用哪个版本的Perl?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 改善这个问题 该win32.perl.org网站提供参考的几个Perl分发用于MS Windows。 长期以来,我一直在使用ActiveState中的 ActivePerl, 但最近我切换到 Strawberry Perl。 恕我直言,Active Perl相对于Strawberry Perl仍然具有的唯一优势是,它带有Perl Tk,这意味着它易于安装 图形调试器Devel :: ptkdb。除此之外,我认为Strawberry Perl具有所有优点。


11
grep -P不再起作用。如何重写搜索?
看起来新版本的OSX不再受支持grep -P,因此使我的某些脚本停止工作。 var1=`grep -o -P '(?<=<st:italic>).*(?=</italic>)' file.txt` 我需要将grep捕获到变量中,并且需要使用零宽度断言以及 \K var2=`grep -P -o '(property:)\K.*\d+(?=end)' file.txt` 任何替代方案将不胜感激。
96 macos  perl  shell 


4
如何在Perl中结合散列?
将两个哈希值合并到%hash1的最佳方法是什么?我一直都知道%hash2和%hash1总是有唯一的键。如果可能的话,我也希望使用一行代码。 $hash1{'1'} = 'red'; $hash1{'2'} = 'blue'; $hash2{'3'} = 'green'; $hash2{'4'} = 'yellow';
95 perl  dictionary  hash  merge 

6
遍历Perl数组的最佳方法
在Perl数组中进行迭代的最佳方法(在速度和内存使用方面)是哪种?有什么更好的办法吗?(@Array无需保留)。 实施1 foreach (@Array) { SubRoutine($_); } 实施2 while($Element=shift(@Array)) { SubRoutine($Element); } 实施3 while(scalar(@Array) !=0) { $Element=shift(@Array); SubRoutine($Element); } 实施4 for my $i (0 .. $#Array) { SubRoutine($Array[$i]); } 实施5 map { SubRoutine($_) } @Array ;
94 arrays  perl  iteration 


7
Ruby的bundler / Perl的纸箱的Python等效项是什么?
我了解virtualenv和pip。但是这些与捆包机/纸箱有点不同。 例如: pip写入shebang或激活脚本的绝对路径 pip没有exec子命令(bundle exec bar) virtualenv将Python解释器复制到本地目录 每个Python开发人员都使用virtualenv / pip吗?还有其他适用于Python的软件包管理工具吗?
93 python  ruby  perl  virtualenv  pip 

12
如何守护UNIX中的任意脚本?
我想要一个守护程序,它可以将任意的通用脚本或命令转换为守护程序。 我有两种常见的情况要处理: 我有一个应该永远运行的脚本。如果它死了(或重新启动时),请重新启动它。永远不要让两个副本同时运行(检测一个副本是否已经在运行,在这种情况下不要启动它)。 我有一个简单的脚本或命令行命令,希望永久重复执行(两次运行之间有短暂的暂停)。再次,不允许脚本的两个副本同时运行。 当然,在案例2中围绕脚本编写一个“ while(true)”循环然后为案例1应用解决方案是很简单的,但是更通用的解决方案将直接解决案例2,因为这适用于案例1中的脚本,例如好(你可能只是想更短或没有停顿如果脚本不打算会死(当然,如果剧本真的没有永不再死暂停实际上并没有物质))。 请注意,该解决方案不应该涉及在现有脚本中添加文件锁定代码或PID记录。 更具体地说,我想要一个可以“运行”的程序“守护进程” % daemonize myscript arg1 arg2 或者,例如 % daemonize 'echo `date` >> /tmp/times.txt' 它将不断增加的日期列表附加到times.txt。(请注意,如果要守护的参数是一个脚本,该脚本可以像上面的情况1那样永久运行,那么守护程序仍然会做正确的事,并在必要时重新启动它。)然后,可以在.login中输入上述命令和/或每小时或每分钟刷新一次(取决于我对它意外死亡的担心程度)。 注意:守护程序脚本将需要记住正在守护程序的命令字符串,这样,如果再次守护相同的命令字符串,它将不会启动第二个副本。 此外,理想情况下,该解决方案应该在OS X和linux上都可以工作,但是欢迎使用一种解决方案。 编辑:如果您必须使用调用它,这很好sudo daemonize myscript myargs。 (如果我认为这一切都是错误的,或者有快速而肮脏的部分解决方案,我也很乐意听到。) PS:如果有用,这是一个特定于python的类似问题。 而这个回答类似的问题有什么似乎是一个任意脚本的快速和肮脏的妖魔化一个有用的成语:


3
我应该如何在Perl中使用“我的”关键字?
在示例Perl脚本在线中,我始终在变量名之前看到“ my”关键字,但我不知道它是什么意思。我尝试在线阅读手册页和其他网站,但是由于我的使用方式和手册之间存在差异,因此我很难分辨它的用途。 例如,在本文中,它用于获取数组的长度: 在Perl中查找数组的大小 但是手册说: my声明列出的变量在包围的块,文件或eval中是局部的(按词法)。如果列出了多个值,则该列表必须放在括号中。 它有什么作用,如何使用?

8
如何使用grep,regex或perl按照模式提取字符串
我有一个看起来像这样的文件: <table name="content_analyzer" primary-key="id"> <type="global" /> </table> <table name="content_analyzer2" primary-key="id"> <type="global" /> </table> <table name="content_analyzer_items" primary-key="id"> <type="global" /> </table> 我需要的是遵循引号中提取任何东西name=,即content_analyzer,content_analyzer2和content_analyzer_items。 我在Linux机器上执行此操作,因此使用sed,perl,grep或bash的解决方案很好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.