Articles of perl

如何将环境设置导入到我的Perl程序中?

我有一个脚本,其内容只是在linux中导出一个variables。 export LD_LIBRARY_PATH=…. 我想在我的Perl脚本中运行这个脚本,这样任何运行我的Perl脚本的人都将设置它们的LD_LIBRARY_PATH 。 我可以在我的Perl脚本的开始执行此操作: #!/usr/bin/perl -w system(". /myfolder1/myfolder2/myScript.sh");

PerlEmbed – C# – Mono – Linux

有没有人尝试在Mono Linux上使用perlembed? 这是链接: perlembed 这是我第一次尝试DllImport签名: private const string PERL_LIB = "/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE/libperl.so"; [DllImport(PERL_LIB, EntryPoint = "perl_alloc", SetLastError = true)] public static extern IntPtr Alloc(); [DllImport(PERL_LIB, EntryPoint = "perl_construct", SetLastError = true)] public static extern void Construct(IntPtr hPerl); [DllImport(PERL_LIB, EntryPoint = "perl_destruct", SetLastError = true)] public static extern void Destruct(IntPtr hPerl); [DllImport(PERL_LIB, EntryPoint = "perl_free", SetLastError = […]

如何在适用于子级的Perl脚本中设置ulimit?

我有一个Perl脚本,执行各种安装步骤来为我们公司设置一个开发框。 它运行各种shell脚本,其中一些由于低于所需的ulimit (特别是堆栈大小 – 在我的情况下)而崩溃。 因此,我想设置一个适用于从我的主Perl中启动的所有脚本( children )的ulimit ,但我不知道如何实现这一点 – 任何从脚本内调用ulimit的尝试只设置它该特定的子shell,立即退出。 我知道我可以在运行Perl脚本之前调用ulimit或者使用/etc/security/limits.conf但是我不希望用户知道这些 – 他们只应该知道如何运行脚本,它应该为他们照顾这一切。 我也可以在每次运行命令时运行ulimit ,像这样ulimit -s BLA; ./cmd ulimit -s BLA; ./cmd但我不想每次重复这个,我觉得有一个更好,更干净的解决scheme。 另一个疯狂的“解决方法”是制作一个名为BLA.sh的包装脚本,它将设置ulimit并调用BLA.pl,但是在我看来,这是一个破解,现在我有两个脚本(我甚至可以使BLA.pl用“ulimit -s BLA; ./BLA.pl-foo”来调用自己,根据它是否看到–foo而不同,但是这比以前更加黑客)。 最后,显然我可以安装BSD ::资源,但我想避免使用外部依赖。 那么从Perl脚本中设置ulimit的方法是什么,并使其适用于所有的孩子? 谢谢。

在Unix中删除ANSI颜色转义的最佳方法

我有一个perl progaram其打印输出的颜色。 如果我rediect文件中的输出,并在vi中打开我看到颜色特殊字符。 像这样的东西。 ^[[31;43mAnd this is red on_yellow too^[[0m 从输出文件中删除此颜色字符的最佳方法是什么? 谢谢 更新: 我尝试了正则expression式。 这个对我有用: cat -va|head ^[[30;41mThis is black on_red^[[0m ^[[30;41mAnd this is black on_red too^[[0m ^[[30;42mThis is black on_green^[[0m ^[[30;42mAnd this is black on_green too^[[0m ^[[30;43mThis is black on_yellow^[[0m ^[[30;43mAnd this is black on_yellow too^[[0m ^[[30;44mThis is black on_blue^[[0m ^[[30;44mAnd this is black […]

使用AWK从两个文件中分解n个列

我有两个N列数的文件 文件1: A 1 2 3 ……. Na1 B 2 3 4 ……. Nb1 文件2: A 2 2 4 ……. Na2 B 1 3 4 ……. Nb2 我想要一个输出从File1的第一列值将被从File2的第一列中减去,这样直到列N如下所示: A -1 0 -1 …….. (Na1-Na2) B 1 0 0 …….. (Nb1-Nb2) 如何在Linux环境中执行AWK或Perl脚本?

Perl脚本可用作程序和模块

我有一个Perl脚本(独立程序),其中包含我想在其他脚本中重用的一些子。 由于执行环境的限制,我不能将这些函数移动到一个普通的.pm文件中。 是否可以区分脚本是作为独立程序运行还是由另一个脚本编辑/ do ? 我唯一能find的就是在顶层使用caller :独立程序没有任何调用者,而当require caller显示谁加载模块。 有没有更好的解决scheme?

如何在一行中接触文件和mkdir

我需要用一个绝对文件名来访问一个文件,例如:/opt/test/test.txt,但我不确定系统上是否存在/ opt / test。 所以代码应该与此类似: if (-d '/opt/test') { touch '/opt/test/test.txt'; } else { mkdir -p '/opt/test'; touch '/opt/test/test.txt' } 有没有更好的方法来简化代码? 我希望有一些系统命令可以只用一行完成相同的工作。

我怎样才能用Perl杀死整个进程树呢?

什么是从Perl脚本中杀死一个进程及其所有subprocess的最好方法? 它应该至less在Linux和Solaris下运行,不需要安装任何额外的软件包。 我的猜测是通过parsing/ proc中的文件或parsingps的输出(在Linux和Solaris之间似乎都不可移植)来获取所有进程及其父母的列表。 然后杀死树中的所有进程(这似乎容易出现竞争状况)。 我可以忍受这种特殊情况下的竞争条件,但是我怎样才能得到进程列表呢?

简洁的方式来打印所有的行,直到匹配给定模式的最后一行

我试图find一个简洁的shell,它会给我一个文件中的所有行, 直到某种模式。 用例将转储日志文件中的所有行,直到find指示服务器已重新启动的标记。 这是一个愚蠢的壳只有这样的方式: tail_file_to_pattern() { pattern=$1 file=$2 tail -n$((1 + $(wc -l $file | cut -d' ' -f1) – $(grep -E -n "$pattern" $file | tail -n 1 | cut -d ':' -f1))) $file } 一个稍微更可靠的Perl方式,需要stdin上的文件: perl -we ' push @lines => $_ while <STDIN>; my $pattern = $ARGV[0]; END { my $last_match = […]

在Perl中串行处理XML数据

我想知道哪个XMLparsing器的人事情将是我的情况下最好的Perl。 我做了很多的阅读,并尝试过XML::LibXML和XML::SAX 。 第一个用完了太多的内存,第二个对我来说看起来并不那么快(甚至在closures纯粹的perlparsing器之后)。 我的需求相当具体。 通过Net::SSH库,我收到了最多50MB的大量响应。 我希望将这些数据传递给XML库,以便将最小数量的数据保存在内存中。 然后,我需要在某些标签中查找数据,并对其进行任何操作,在某些情况下,可以对一些值进行求和,而在其他情况下只需提取值并将其写入文件或其他任何内容。 所以我需要一个可以串行工作的XMLparsing器,快速工作并使用最less的内存。 我得到的数据最多为1024个字节,所以我希望能够像$myparser->sendData($mynewData)那样做一些事情,然后在打开或closures一个新标签时调用类似于XML::SAX函数XML::SAX确实。 我不一定需要XPath或XSLT。