Tag: perl

我怎样才能优雅地调用一个名字被保存在variables中的Perl子程序?

我在运行时将我要调用的子例程的名称保存在名为$ action的variables中。 然后我用它在正确的时间调用这个子部分: &{\&{$action}}(); 工作正常。 我唯一不喜欢的就是它很丑,每当我这样做的时候,我都觉得应该为下一个开发者添加评论: # call the sub by the name of $action 任何人都知道这样做更漂亮的方式? 更新:这里的想法是为了避免每次我添加一个新的可调用子文件时必须维护一个调度表,因为我是唯一的开发人员,我不担心其他程序员遵循或不遵循“规则”。 为了我的方便牺牲了一点安全性。 相反,我的调度模块会检查$ action,以确保1)它是一个定义的子例程的名称,而不是恶意代码与eval一起运行,以及2)它不会运行任何由下划线开头的子项,通过这个命名约定标记为内部唯一的子。 有关这种方法的任何想法? 在调度表中列入白名单子程序是我永远都会忘记的事情,我的客户宁愿我在“有效”一边而不是在“它是邪恶的安全”方面犯错。 (开发应用程序的时间非常有限) 最后更新:我认为我已经决定派遣表。 虽然我很好奇,如果有人读过这个问题,曾经试图取消一个这样的问题,但是我不得不跪下这里的集体智慧。 感谢所有,许多伟大的回应。

如何一行一行地合并两个文件

我有两个文件( file1.txt和file2.txt ),文件只是例子。 如何合并这两个文件,以创build文件 – merge_files.txt作为例子3 我现在写ksh脚本,所以合并可以用ksh,awk,sed,perl,one liner等来完成 背景 – 为什么我需要合并文件:我的目标是将旧文件 (存在于第一个字段中)重命名为NEW文件 (存在于第二个字段中), 例1 more file1.txt /etc/port1-192.9.200.1-255.555.255.0 /etc/port2-192.9.200.1-255.555.255.0 /etc/port3-192.9.200.1-255.555.255.0 /etc/port4-192.9.200.1-255.555.255.0 /etc/port5-192.9.200.1-255.555.255.0 . . . . 例题 more file2.txt /etc/port1-192.90.2.1-255.555.0.0 /etc/port2-192.90.2.1-255.555.0.0 /etc/port3-192.90.2.1-255.555.0.0 /etc/port4-192.90.2.1-255.555.0.0 /etc/port5-192.90.2.1-255.555.0.0 . . . . 示例3 more merge_files.txt /etc/port1-192.9.200.1-255.555.255.0 /etc/port1-192.90.2.1-255.555.0.0 /etc/port2-192.9.200.1-255.555.255.0 /etc/port2-192.90.2.1-255.555.0.0 /etc/port3-192.9.200.1-255.555.255.0 /etc/port3-192.90.2.1-255.555.0.0 /etc/port4-192.9.200.1-255.555.255.0 /etc/port4-192.90.2.1-255.555.0.0 /etc/port5-192.9.200.1-255.555.255.0 /etc/port5-192.90.2.1-255.555.0.0 . . . . . […]

Perl逐行阅读

我有一个简单的Perl脚本来逐行读取文件。 代码如下。 我想显示两行并打破循环。 但它不起作用。 错误在哪里? $file='SnPmaster.txt'; open(INFO, $file) or die("Could not open file."); $count = 0; foreach $line (<INFO>) { print $line; if ($++counter == 2){ last; } } close(INFO);

鲤鱼/咕噜,咕咕/忏悔和详细选项有什么区别?

我没有使用鲤鱼,因为我一般都是自己动手的。 但是,本着保持核心模块的精神,我现在正在使用它。 但是,它似乎只比警告/死亡好。 而且,咕咕/忏悔/详细甚至是做什么? 我已经运行这个简短的脚本来获得输出的想法(因为鲤鱼文档不这样做)。 它看起来完全一样(除了随机string)。 #!/usr/bin/perl package Warning; sub warning { warn "warn"; } package CWarn; use Carp qw(carp cluck); sub cwarn { int(rand(2)) ? carp "carp" : cluck "cluck"; } package Fatal; use Carp qw(confess croak); sub fatal { int(rand(2)) ? confess "confess" : croak "croak"; } package Loop; use v5.10; sub loop […]

如何在Perl中检测操作系统?

我在Mac,Windows和Ubuntu上有Perl。 我怎么能从剧本中知道哪一个是哪个? 提前致谢。 编辑:我被问到我在做什么。 这是一个脚本,是我们跨平台构build系统的一部分。 该脚本recursion目录并计算出要构build的文件。 有些文件是特定于平台的,因此在Linux上我不想生成以_win.cpp结尾的文件等等。

我怎样才能得到在Perl中的调用堆栈列表?

有没有一种方法,我可以访问(打印输出)sub +模块列表任意深度的子脚本之前的Perl脚本中的当前位置? 我需要修改一些Perl模块(.pm's)。 工作stream程是通过一个CGI脚本从一个网页开始的,将input传递到需要使用数据的模块中的几个模块/对象。 数据发生了变化,我需要找出在哪里。

在正则expression式中如何嵌套捕获组?

是否有正则expression式应该如何处理嵌套圆括号的捕获行为的定义行为? 更具体地说,你是否可以合理地预期,不同的引擎会在第一个位置捕获外部括号,并在随后的位置嵌套括号? 考虑下面的PHP代码(使用PCRE正则expression式) <?php $test_string = 'I want to test sub patterns'; preg_match('{(I (want) (to) test) sub (patterns)}', $test_string, $matches); print_r($matches); ?> Array ( [0] => I want to test sub patterns //entire pattern [1] => I want to test //entire outer parenthesis [2] => want //first inner [3] => to //second inner [4] => […]

如何正确deobfusacte Perl脚本?

我试图去混淆下面的Perl代码( 来源 ): #!/usr/bin/perl (my$d=q[AA GTCAGTTCCT CGCTATGTA ACACACACCA TTTGTGAGT ATGTAACATA CTCGCTGGC TATGTCAGAC AGATTGATC GATCGATAGA ATGATAGATC GAACGAGTGA TAGATAGAGT GATAGATAGA GAGAGA GATAGAACGA TC GATAGAGAGA TAGATAGACA G ATCGAGAGAC AGATA GAACGACAGA TAGATAGAT TGAGTGATAG ACTGAGAGAT AGATAGATTG ATAGATAGAT AGATAGATAG ACTGATAGAT AGAGTGATAG ATAGAATGAG AGATAGACAG ACAGACAGAT AGATAGACAG AGAGACAGAT TGATAGATAG ATAGATAGAT TGATAGATAG AATGATAGAT AGATTGAGTG ACAGATCGAT AGAACCTTTCT CAGTAACAGT CTTTCTCGC TGGCTTGCTT TCTAA CAACCTTACT G ACTGCCTTTC TGAGATAGAT […]

我怎样才能存储正则expression式捕获在Perl中的数组?

我试图在Perl中使用正则expression式。 我奇怪的是,如果有可能将expression式的所有匹配存储到数组中? 我知道我可以使用以下内容: ($1,…,$n) = m/expr/g; 但似乎只有当你知道你正在寻找的比赛数量时才能使用。 我试过my @array = m/expr/g; 但似乎并不奏效。 谢谢你的帮助!

我应该如何在Perl中使用“我的”关键字?

我不断地在例子Perl脚本的在线variables名称前面看到“my”关键字,但我不知道这意味着什么。 我尝试在网上阅读手册页和其他网站,但是鉴于我如何使用它和手册之间的区别,我很难辨别它是什么。 例如,它用来获得这个post中数组的长度: 在Perl中查找一个数组的大小 但手册说: 我声明列出的variables是本地(词法)封闭块,文件,或评估。 如果列出多个值,则列表必须放在括号内。 它做了什么,它是如何使用的?