我的目标:实现套接字编程,如果服务器未安装在远程机器上,客户端会尝试连接到服务器,客户端(主机)将 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) 如何连接两个地图的输出以形成单个平面数组?
我试图使用这个:
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) 我不知道我是不是意外地删除了或者在某处输入了一个错字,但突然之间我的一些代码停止了工作.出于某种原因,从$ 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文件句柄.
我有此功能来识别和转换标签,表情符号等
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>
如何在函数内部实现呢?
给出了一个输入文件,该文件的每一行包含每一列的引号和回车符/换行符。
如果该行包含新行,则将其附加在引号内的同一行中,例如,第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文件。
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) 我对 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 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:00至2/6/2020 13:00<- 仅减去 12 小时
请使用提到的代码帮助解决此问题
我想在字符串中搜索给定的字符并返回它后面的字符。
根据此处的帖子,我尝试写作
my $string = 'v' . '2';
my $char = $string =~ 'v'.{0,1};
print $char;
Run Code Online (Sandbox Code Playgroud)
但这会返回 1 和一个哈希值(我上次运行它时,确切的输出是 1HASH(0x11823a498))。有谁知道为什么它返回一个散列而不是字符?
以下代码返回“在 (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)