小编zdi*_*dim的帖子

Perl:实现套接字编程( system() 从不返回)

我的目标:实现套接字编程,如果服务器未安装在远程机器上,客户端会尝试连接到服务器,客户端(主机)将 tar 文件传输到服务器(目标)机器和 perl 脚本。这个 perl 脚本解压文件夹并运行一个脚本(服务器 perl 脚本),现在的问题是:这个服务器脚本必须永远运行(多个客户端),直到机器重新启动或发生一些不愉快的事情。所以脚本运行正常:但是由于它一直在运行,因此控件不会返回到客户端,客户端将再次尝试连接到服务器(在某个预定义的套接字上),所以基本上我希望以某种方式运行服务器但带回控制到我的主机,在这种情况下是客户端。

这是代码:

my $sourcedir = "$homedir/host_client/test.tar";
my $sourcedir2 = "$homedir/host_client/sabkuch.pl";
my $remote_path = "/local/home/hanmaghu";

# Main subroutines
my $ssh = Net::OpenSSH->new ( $hostmachine, user =>$username, password => $password);
$ssh->scp_put($sourcedir,$sourcedir2,$remote_path)
     or die "scp failed \n" . $ssh->error;
# test() is similar to system() in perl openssh package
my $rc = $ssh->test('perl sabkuch.pl'); 
# check if test function returned or not -> this is never executed
if ($rc == 1) {
    print "test was …
Run Code Online (Sandbox Code Playgroud)

sockets perl fork openssh system

1
推荐指数
1
解决办法
218
查看次数

Perl合并地图结果

如何连接两个地图的输出以形成单个平面数组?

我试图使用这个:

my $test = { 'foo' => [
    map { 
        { 'i' => "$_" } 
    } 0..1,
    map {
        { 'j' => "$_" }
    } 0..1
] };
Run Code Online (Sandbox Code Playgroud)

为了达到这样的结果:

my $test = {'foo' => [
        {
            'i' => '0'
        },
        {
            'i' => '1'
        },
        {
            'j' => '0'
        },
        {
            'j' => '1'
        },
    ]}
Run Code Online (Sandbox Code Playgroud)

然而,这是我得到的$test

{
    'foo' => [
        {
            'i' => '0'
        },
        {
            'i' => '1'
        },
        {
            'i' => 'HASH(0x7f90ad19cd30)'
        },
        { …
Run Code Online (Sandbox Code Playgroud)

perl dictionary list

1
推荐指数
1
解决办法
79
查看次数

无法读取管道

我不知道我是不是意外地删除了或者在某处输入了一个错字,但突然之间我的一些代码停止了工作.出于某种原因,从$ in中没有读取任何行.

use Win32::Job;
use IO::Handle; 

STDOUT->autoflush;

pipe my $in, my $out;

my $job = Win32::Job->new;

sub flush_pipe{
    while (defined(my $line = <$in>)) {
       chomp($line);
       print($line);

    }
}
my $pid = $job->spawn("cmd", "cmd /C \"ipconfig\"",
    {
        stdout=>$out
    }
);
flush_pipe();
Run Code Online (Sandbox Code Playgroud)

编辑:通过反复试验,我最终发现在冲洗管道之前我必须关闭$ out文件句柄.

perl fork pipe

1
推荐指数
1
解决办法
94
查看次数

更新功能以识别链接

我有此功能来识别和转换标签,表情符号等

function convert_text($str) {
        $regex = "/[@#](\w+)/";
    //type and links
        $hrefs = [
            '#' => 'hashtag.php?hashtag',
            '@' => 'user.php?user'
        ];

        $result = preg_replace_callback($regex, function($matches) use ($hrefs) {
             return sprintf(
                 '<a href="%s=%s">%s</a>',
                 $hrefs[$matches[0][0]],
                 $matches[1], 
                 $matches[0]
             );
        }, $str);

        //$result = preg_replace("/U\+([A-F0-9]{5})/", '\u{${1}}', $result);
        $result = preg_replace('/U\+([A-F0-9]{5})/', '<span style="font-size:30px;">&#x\\1;</span>', $result);

        return ($result);
    }
Run Code Online (Sandbox Code Playgroud)

我想,使其认识http://https://从文字和比转换为:

<a href="http://link.com">http://link.com</a> 如何在函数内部实现呢?

php regex arrays function href

1
推荐指数
1
解决办法
355
查看次数

如果数据中不存在定界符值,请删除双引号

给出了一个输入文件,该文件的每一行包含每一列的引号和回车符/换行符。

  • 如果该行包含新行,则将其附加在引号内的同一行中,例如,第1行

  • 如果没有定界符(,),则删除每列的双引号。

  • 删除回车符,即(^ M)

为了举例,给出以下输入文件

"name","address","age"^M
"ram","abcd,^M
def","10"^M
"abhi","xyz","25"^M
"ad","ram,John","35"^M
Run Code Online (Sandbox Code Playgroud)

我想通过sed / perl / awk脚本/ oneliner获得以下输出。

name,address,age
ram,"abcd,def",10
abhi,xyz,25
ad,"ram,John",35
Run Code Online (Sandbox Code Playgroud)

到目前为止我已经累了的解决方案用于附加上一行

sed '/^[^"]*"[^"]*$/{N;s/\n//}' sample.txt
Run Code Online (Sandbox Code Playgroud)

用于替换Control-M字符

perl -pne 's/\\r//g' sample.txt
Run Code Online (Sandbox Code Playgroud)

但是我没有达到我下面要求的最终输出

csv perl awk sed

1
推荐指数
1
解决办法
162
查看次数

如何在perl中删除逗号

我有此示例数据,我想删除逗号,特别是该行的最后一个逗号,顺便说一下,它是.csv文件。

W,S,Vbd2OX / NW,Vbd2OX / PW,Vbd3OX / NW,Vbd3OX / PW, 
ID,ID,11200,V 11200,V 11200,V 11200, 
6,1,0.69,5.56,-5.56,10.5,-10.12,
6,2,3.99,7,-5.13,-7,640.455,

这2个代码不起作用最后一个逗号仍然存在

$line =~ s/\,$//g;
Run Code Online (Sandbox Code Playgroud)

$line =~ s/,//g;
Run Code Online (Sandbox Code Playgroud)

csv perl

1
推荐指数
1
解决办法
59
查看次数

使用多个条件对嵌套哈希进行排序

我对 perl 编程有点陌生,我有一个可以这样表述的散列:

$hash{"snake"}{ACB2}   = [70, 120];
$hash{"snake"}{SGJK}   = [183, 120];
$hash{"snake"}{KDMFS}   = [1213, 120];
$hash{"snake"}{VCS2}   = [21, 120];
...
$hash{"bear"}{ACB2}   = [12, 87];
$hash{"bear"}{GASF}   = [131, 87];
$hash{"bear"}{SDVS}   = [53, 87];
...
$hash{"monkey"}{ACB2}   = [70, 230];
$hash{"monkey"}{GMSD}   = [234, 230];
$hash{"monkey"}{GJAS}   = [521, 230];
$hash{"monkey"}{ASDA}   = [134, 230];
$hash{"monkey"}{ASMD}   = [700, 230];
Run Code Online (Sandbox Code Playgroud)

哈希的结构总结如下:

%hash{Organism}{ProteinID}=(protein_length, total_of_proteins_in_that_organism)
Run Code Online (Sandbox Code Playgroud)

我想根据某些条件对这个哈希进行排序。首先,我只想考虑那些蛋白质总数大于100的生物,然后我想显示生物的名称以及最大的蛋白质及其长度。

为此,我将采用以下方法:

    foreach my $org (sort keys %hash) {
        foreach my $prot (keys %{ $hash{$org} }) {
            if ($hash{$org}{$prot}[1] > 100) {
                @sortedarray = …
Run Code Online (Sandbox Code Playgroud)

perl hash multidimensional-array protein-database perl-hash

1
推荐指数
1
解决办法
132
查看次数

perl strftime 本地时间减去 12 小时

我正在使用 perl strftime for (datetime now)

perl -MPOSIX -e 'print POSIX::strftime("%m/%d/%Y %H:%M", localtime());'
Run Code Online (Sandbox Code Playgroud)

我想现在减去 12 小时的日期时间

输出示例: 2/7/2020 1:002/6/2020 13:00<- 仅减去 12 小时

请使用提到的代码帮助解决此问题

perl datetime strftime localtime

1
推荐指数
1
解决办法
357
查看次数

当我试图在搜索到的字符后查找字符时,Perl 正在返回哈希

我想在字符串中搜索给定的字符并返回它后面的字符。

根据此处的帖子,我尝试写作

my $string = 'v' . '2';
my $char = $string =~ 'v'.{0,1};
print $char;
Run Code Online (Sandbox Code Playgroud)

但这会返回 1 和一个哈希值(我上次运行它时,确切的输出是 1HASH(0x11823a498))。有谁知道为什么它返回一个散列而不是字符?

regex perl

1
推荐指数
1
解决办法
67
查看次数

如何解决 Perl eval() 中的“发现裸字”问题

以下代码返回“在 (eval 1) 第 1 行,靠近“*,out”的操作符预期位置找到了裸字(out 之前缺少操作符?)”

$val = 0;
$name = "abc";
$myStr = '$val = ($name =~ in.*,out [)';
eval($myStr);
Run Code Online (Sandbox Code Playgroud)

根据我的理解,我可以通过用“//”包装“in.*,out [”块来解决这个问题。

但是“in.*,out [”可以变化。(例如:用户输入)。用户可能会错过给出“//”。因此,还有其他方法来处理这个问题吗?(例如:如果 eval() 尝试返回“在...处找到裸字”,则返回 0)

regex perl eval

1
推荐指数
1
解决办法
268
查看次数