Articles of perl

有什么办法在Perl中运行多个Linux命令,并保持它们之间的环境variables

我有一个Perl脚本,我想要做到以下几点: 系统(“源myscript.sh”); myscript.sh导出多个envs,但是一旦系统完成,这些就会丢失,所以如果我现在这样做: 系统(“echo $ SOME_VAR”); 它失败了,因为$ SOME_VAR是由myscript.sh导出的,系统完成时会丢失。 这是一个简单的例子,但在我的实际使用情况下,myscript.sh是一个复杂的脚本,我想执行10到20个系统命令,依赖于它的envvariables。 预先感谢您的回复。

Perl脚本在linuxterminal中运行,但在浏览器中出现错误

我试图在浏览器中运行这个简单的脚本,并保持错误。 如果我在Linux中运行它,它运行良好。 脚本 – test.pl: #!/home/biotools/perl/5.10.0/bin/perl use lib '/home/biotools/current/lib/site_perl/5.10.0'; use lib '/people/users/123456/classPath/lib'; use IngresLXSetupNoLog; use strict; use warnings; use Path::Class; # this is line 8 my $dir = dir('./mydir'); # foo/bar print "Content-type: text/html\n\n"; # Iterate over the content of foo/bar while (my $file = $dir->next) { # See if it is a directory and […]

使用Sed获取打开和closures字符之间的所有字符

我试图使用sed来获取开始和结束字符之间的一些字符。 这些开始和结束字符可以是括号,例如{和}等。在我的具体情况下,开始字符是= ,结束字符是行的结尾。 在PHP中,我有一个通常为我工作的正则expression式: ([^\^]*?) 。 但是,因为sed使用POSIX-BRE的味道,我不相信这会起作用。 我正在使用正则expression式的string可能是这样的: password=mailPASSWORD 。 mailPASSWORD可以包含常规字母字符以及特殊字符。 所以我想replacemailPASSWORD并把我自己的密码。 sed -i -r "s/password[ ]*=[ ]*([pattern_goes_here])/password=mypassword/" /myfile 我会很感激一些帮助。 提前致谢 编辑 在看了sed的其他select之后,我发现perl实际上是这类事情的一个更好的工具。 因为我的正则expression式知识基于perl,所以看起来更好。 以下是我将如何解决同样的问题: perl -p -i -e "s/password *= *[^\n]*/password=mypassword/" /myfile 由于我一行一行地做东西,所以让脚本变得更容易。

Perl IPC不使用共享内存?

部分代码是: sub _getPages { my $self = shift; my $rel_url = lc(shift); my @turls = (); my $urls = []; my $ipc_share = tie $urls, 'IPC::Shareable',undef, { destroy => 1 }; foreach my $stag (@{$self->{SUPP_TAGS}}) { push(@{$urls}, map { lc($self->_normalizeSupportURL($_->url(), $self->{MECH_O}->getGlobalMechInstance()->uri->authority, $self->{MECH_O}->getGlobalMechInstance()->uri->scheme)) } grep { ((index($_->url,$rel_url) > -1) || ($_->url =~ m{^/})) && $_->url !~ […]

pipe道打开“|”之间的区别 和'| – '(安全pipe道打开)

我已经看到这两种forms的pipe道在Perl中open 。 一个是简单的pipe道打开 open FH,'| command'; 和其他是安全的pipe道打开 open FH,'|-','command'; 现在有什么用-在第二个? 他们都写信给pipe道。 我知道-叉新的过程。 简单| 也创造新的过程? 我们何时/应该使用安全pipe道打开|- ?

目录在perl中被检测为文件

我试图在循环中使用这个条件(-d $var)来检查给定目录上有多less个子目录,但有些文件夹被检测为一个文件。 发生了什么情况,无法识别目录? 我该如何解决这个问题? 我的代码是: foreach my $file (@files) { next if($file =~ m/^\./); if (-d $file and -e $file and !$seen{$file}) { $seen{$file} = 1; push @Dir, "$pwd/$file"; } next if ($file !~ m/\s/i); my $new_name = s/\s//g; `mv $pwd/$file $pwd/$new_name`; }

Awk / Perl以合理的格式将文本文件转换为csv

我有一个历史的自动生成的日志文件,我想在上传到数据库之前转换为csv文件 ————————————– Thu Jul 8 09:34:12 BST 2010 BLUE Head 1 Duration = 20 s Activity = 14.9 MBq Sensitivity = 312 cps/MBq ————————————– Thu Jul 8 09:34:55 BST 2010 BLUE Head 1 Duration = 20 s Activity = 14.9 MBq Sensitivity = 318 cps/MBq ————————————– Thu Jul 8 10:13:39 BST 2010 RED Head 1 […]

在特定的terminal中通过Perl运行一个shell命令

首先,我对Perl很新,所以我可能会漏掉一些明显的东西。 这不是典型的“我想通过Perl运行shell命令”的问题。 我不想捕获所有的shell输出。 我有一个智能写入terminal的程序/脚本。 我没有写它,也不知道它是如何工作的,但是在打印一些初始化之后,它似乎将视图移动到适当的位置,然后擦除以前的terminal输出并将其写入(更新)直到最终完成。 我想从我的Perl脚本中调用这个,而不是将所有内容都打印到一个文件中去抓取,因为打印到一个文件并不能保证打印输出的智能。 我所需要做的是: 在我的Perl脚本中打开一个xterm 在该terminal中进行系统调用 有terminal直到我手动退出 我可以在perl中做这个吗? 谢谢。

在system中使用Perl期望()

我正在尝试使用expect在Perl脚本中使用系统调用以recursion方式在远程服务器上创build目录。 相关电话如下: system("expect -c 'spawn ssh $username\@$ip; expect '*?assword:*' {send \"$password\r\"}; expect '*?*' {send \"mkdir -p ~/$remote_start_folder/$remote_folder_name/$remote_username/$remote_date/\r\"}; expect '*?*' {send \"exit\r\"}; interact;'"); 这工作正常。 但是,如果是第一次使用ssh访问远程机器,它会要求(yes/no)确认。 在上面的陈述中,我不知道在哪里添加。 有没有办法将其纳入上述声明(使用某种or )?

使用perl将AT命令发送到调制解调器

我有一个embedded式Linux框与Perl 5.10和GSM调制解调器连接。 我写了一个简单的perl脚本来通过调制解调器设备文件(/ dev / ttyACM0)读/写AT命令。 如果我写一个类似“ATZ \ r”的simle命令到调制解调器并等待响应,我会收到很奇怪的数据,比如“\ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ n \ nATZ \ n \ n \ n \ n …“,并且数据一直在进来。它几乎看起来像是响应与其他数据混淆了。 我希望像“ATZ \ nOK \ n”(如果启用回声)。 如果我用例如minicom手动发送“ATZ”命令一切都按预期工作。 这导致我认为这可能是某种perl缓冲问题,但这只是猜测。 我用perl打开设备(我的embedded式linux perl没有Device :: Serialport): open(FH, "+<", "/dev/ttyACM0") […]