Articles of perl

如何快速检查Linux是否使用Perl安装了unzip?

如何快速检查是否使用Perl安装了Linux unzip ?

mod_perl无法在/ tmp中看到文件

我有一些mod_perl代码试图访问/ tmp下的文件…但它会抛出一个'没有这样的文件或目录'的错误。 我在代码中添加了一个'ls -al / tmp'来查看Perl在目录中看到的内容,它只给了我。 和..: drwxrwxrwt. 2 root root 6 Jan 21 13:36 . drwxrwxrwx. 18 root sysadmin 4096 Nov 22 22:14 .. 实际上,在/ tmp下有一些文件的混合,包括Apache用户拥有的文件。 将我的代码更改为'ls -al /'会给出一个正确的目录列表(没有丢失)。 我尝试sudo'ing到Apache用户,并可以看到下/ tmp文件,所以它必须是一些mod_perl相关的。 想法? 我在CentOS 7下运行mod_perl 2.0.8和Apache 2.4。SELinux设置为宽容。

我怎样才能添加一个目录到系统级的Perl库path?

在一个标准的linux设置,我可以在哪里添加一个目录到@INCvariables? 在/etc/profile文件中,我添加了: export PERLLIB=$PERLLIB:/foo/bar export PERL5LIB=$PERL5LIB:/foo/bar 谢谢

shell脚本工作正常,没有shebang线? 为什么?

我正在写一个简单的shell脚本,发现我的shell脚本不需要shebang行 #!/bin/sh 如果我给予我的脚本执行权限并执行使用./myscript.sh 。 它运行良好。 我正在使用bash shell, /bin/sh实际上是指向bash 。 lrwxrwxrwx 1 root root /bin/sh -> bash 我知道shebang行用于告诉shell哪个解释器用于脚本的其余部分。 如果我错过了perl中的shebang行,给予执行权限并运行./myscript.pl ,它不起作用。 这里究竟发生了什么? 如果我用./ ,什么时候真的需要?

有条件的Awk hashmap匹配查找

我有2个表格文件。 一个文件包含一个名为lookup_file.txt的50个键值的映射。 另一个文件具有30列和数百万行的实际表格数据。 data.txt我想用lookup_file.txt中的值replace第二个文件的id列。 。 我怎样才能做到这一点? 我宁愿在bash脚本中使用awk。另外,有没有一个hashmap数据结构,我可以在bash中用来存储50个键/值而不是另一个文件?

Perl:recursion地重命名所有文件和目录

我需要recursion重命名每个文件和目录。 我将空格转换为下划线,并使所有文件/目录名称为小写。 如何使下列脚本在一次运行中重命名所有文件? 目前,在转换所有文件/目录之前,脚本需要运行多次。 代码如下: #!/usr/bin/perl use File::Find; $input_file_dir = $ARGV[0]; sub process_file { $clean_name=lc($_); $clean_name=~s/\s/_/g; rename($_,$clean_name); print "file/dir name: $clean_name\n"; } find(\&process_file, $input_file_dir);

为什么glob lstat匹配项?

看看这个问题的行为,我很惊讶地发现perl lstat()的每一条path都匹配一个glob模式: $ mkdir dir $ touch dir/{foo,bar,baz}.txt $ strace -e trace=lstat perl -E 'say $^V; <dir/b*>' v5.10.1 lstat("dir/baz.txt", {st_mode=S_IFREG|0664, st_size=0, …}) = 0 lstat("dir/bar.txt", {st_mode=S_IFREG|0664, st_size=0, …}) = 0 我在我的Linux系统上看到与glob(pattern)和<pattern>以及更高版本的perl相同的行为。 我的期望是,globbing只是简单的opendir / readdir,并且不需要检查它正在search的实际path名。 这个lstat的目的是什么? 它会影响glob()的返回吗?

在SED / AWK / Perl中单行添加条件在FASTA文件中join换行符

我有一个看起来像这样的数据 > sq1 foofoofoobar foofoofoo > sq2 quxquxquxbar quxquxquxbar quxx > sq3 paxpaxpax pax 我想要做的就是把它们合并成一行: > sq1 foofoofoobarfoofoofoo > sq2 quxquxquxbarquxquxquxbarquxx > sq3 paxpaxpaxpax 我试过这个代码,但失败。 sed -e 'te' -e 'H;$!d;:e' -e 'x;/^$/d;s/\n//g' 什么是正确的方法来做到这一点?

如何检测脚本是否在虚拟机上运行?

我不认为这个问题需要任何解释。 我正在编写一个可以启动虚拟机来模拟networking的软件。 如果软件已经在虚拟机上运行,​​我想禁用此function。 我已经阅读了这篇文章: 如何检测我的应用程序是否在虚拟机中运行? 但是我需要在Linux上这样做,而这篇文章只涵盖了Windows。 我将它标记为一个Perl问题,因为我必须在Perl中执行它,但可能在proc或其他地方有一些文件需要检查,而且对于所有语言都是一样的。 我其实不知道 我感兴趣的是主要检测VirtualBox和KVM,因为那些是我正在使用的VM。 那么,有什么build议?

我怎样才能让Perl等待在system()后台启动的subprocess?

我有一些执行多个参数的shell脚本的Perl代码,为了简化,我假设我有这样的代码: for $p (@a){ system("/path/to/file.sh $p&"); } 之后我想做更多的事情,但是我无法find一种方法来等待所有的subprocess完成,然后再继续。 转换代码使用fork()将是困难的。 有没有更简单的方法?