小编zdi*_*dim的帖子

当父母被杀时杀死孩子

当父母被杀时,Perl是否有一种简单的方法可以杀死子进程?当我kill在父PID上运行时,孩子们仍然活着.

测试脚本:

#!/usr/bin/perl

@sleeps = qw( 60 70 80 );
@pids   = ();

foreach $sleeptime (@sleeps) {

    my $pid = fork();

    if ( not defined $pid ) {
        die;
    }
    elsif ( $pid == 0 ) {

        #child
        system("sleep $sleeptime");
        exit;
    }
    else {

        #parent
        push @pids, $pid;
    }
}

foreach $pid (@pids) {
    waitpid( $pid, 0 );
}
Run Code Online (Sandbox Code Playgroud)

perl fork

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

perl如何处理具有不同引用的模式?

正如https://perldoc.perl.org/perlrun.html所示,

-F选项指定要为-a拆分的模式.该模式可以用//,""或"''包围,否则它将被放在单引号中.您不能在模式中使用文字空格或NUL字符.

我在文本上尝试了以下命令,但结果完全相同.

那么下面例子中这些模式引用的区别是什么?

$ perl -aF"\|" -lne 'print $F[0]' input
Time
2018-01-11 00:00:00
2018-01-11 00:15:00

$ perl -aF'\|' -lne 'print $F[0]' input
Time
2018-01-11 00:00:00
2018-01-11 00:15:00

$ perl -aF/\|/ -lne 'print $F[0]' input
T
2
2

$ perl -aF"|" -lne 'print $F[0]' input
T
2
2

$ perl -aF'|' -lne 'print $F[0]' input
T
2
2


$ perl -aF/|/ -lne 'print $F[0]' input
bash: /: Is a directory
Run Code Online (Sandbox Code Playgroud)

perl sh quotations

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

使用Config :: General解析错误文件时捕获问题

我正在使用Perl 5.16.3并遇到以下问题

我有使用以下代码读取Config :: General格式文件的代码:

use Config::General qw(ParseConfig);
my $meta_file = "/foo/bar/file";
my $hash;
eval {
    $hash = {ParseConfig($meta_file)};
};

if ($@) {
    print $@;
}
Run Code Online (Sandbox Code Playgroud)

现在,当文件指向buy $ meta_file出现问题时,此代码将失败,并且堆栈跟踪类似于以下内容:

在数字eq(==)中使用未初始化的值$ n_read Config :: General :: _ openfile_for_read('Config :: General = HASH(0xff92e30)','/ foo / bar / file')Config :: General :: _ open( 'Config :: General = HASH(0xff92e30)','/ foo / bar / file')Config :: General :: _ process('Config :: General = HASH(0xff92e30)')Config :: General :: new(' Config :: General','/ foo / bar …

perl

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

使用perl创建一个简单的计算器

我需要设计一个简单的计算器在Perl只有ex1.pl叫+-*,和/功能。以下是我所拥有的。

while (@ARGV>0) {
    if ($_=~m/(\d+)\s(.)\s(\d+)/) {
        if ($2 == "+") {
            print "$1 + $3\n";
        }   
        elsif ($2 == "-") {
            print "$1 - $3\n";
        }   
        elsif ($2 == "*") {
            print "$1 * $3\n";
        }   
        elsif ($2 == "/") {
            if ($3 == 0 ) { 
                print "$1 cannot be divided by 0\n";
            }   
            else {
                print "$1 / $3\n";
            }   
        }   
        else {
            print "operator not identified\n";
        }
    } …
Run Code Online (Sandbox Code Playgroud)

unix perl

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

如何使用变量而不是文件句柄

我有一个大的数据文件dump.all.lammpstrj,我需要拆分/归类到一系列文件,如Z_1_filename,Z_2_filename,Z_3_filename等基于每个记录的坐标.

坐标以无序方式保存,因此我的程序读取每一行并确定应将此记录发送到哪个文件.

我用变量, $filehandle = "Z_$i_DUMP"

我希望打开所有可能的文件

for ( my $i = 1; $i <= 100; $i++ ) {
  $filehandle = "Z_$i_DUMP";
  open $filehandle,'>', "Z_$i_dump.all.lammpstrj.dat";
  ...
}
Run Code Online (Sandbox Code Playgroud)

但是在运行我的程序时,我收到了一条消息

不能使用字符串("Z_90_DUMP")作为符号引用,而"严格引用"在...中使用

我不想扫描每个输出文件的所有数据,因为dump.all.lammpstrj扫描需要很长时间.

有没有办法将定义的变量用作文件句柄?

perl

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

打开的含义(STDERR,“&gt;&STDOUT”)

我在一个示例脚本中找到了它,然后我从Google搜索并找到了以下单词,

请注意,您不能简单地将STDERR打开为Perl程序中STDOUT的副本,并避免调用Shell进行重定向。这不起作用:

open(STDERR, ">&STDOUT");
Run Code Online (Sandbox Code Playgroud)

之所以失败,是因为open()使STDERR转到open()时STDOUT所在的位置。然后,反引号使STDOUT转到字符串,但不要更改STDERR(仍将其转到旧的STDOUT)。

现在我很困惑。到底是什么意思open(STDERR, ">&STDOUT");

perl io-redirection

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

在 Perl 中使用自定义条件按三列对逗号分隔的文件进行排序

我有一个逗号分隔的文本文件。我想先按第 3 列对文件进行排序,然后是第 2 列,然后是第 1 列。

但是,我希望第 3 列按字母顺序排序,首先是最长的值。

例如,AAA,然后是 AA,然后是 A,然后是 BBB,然后是 BB,然后是 B,然后是 CCC,然后是 CC,依此类推。

输入(alpha-sort-test2.txt):

JOHN,1,A
MARY,3,AA
FRED,5,BBB
SAM,7,A
JOHN,3,AAA
JOHN,2,AAA
BETTY,2,AAA
JARROD,7,AAA
JOANNE,2,BB
AMANDA,2,DD
AMY,5,B
PETE,7,CC
MATT,4,B
SARAH,3,CCC
GEORGE,3,CC
AMANDA,3,AAA
Run Code Online (Sandbox Code Playgroud)

到目前为止,我拥有的 Perl 代码如下:

$infile = "alpha-sort-test2.txt";
$outfile = "alpha-sort-test-sorted2.txt";

open (INFILE, "<$infile") or die "Could not open file $infile $!";
open (OUTFILE, ">$outfile");

my @array = sort howtosort <INFILE>;

foreach (@array)
{
   chomp;
   print "$_\n";
   print OUTFILE "$_\n"; 
}

sub howtosort 
{
   my @flds_a = …
Run Code Online (Sandbox Code Playgroud)

sorting perl

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

如何在java 8中将二维数组或任何数组转换为List&lt;List&lt;Integer&gt;&gt;?

假设有一个数组Integer[][] a; 那么在java 8中如何将其转换aList<List<Integer>>?这是我的 leetcode Pascal's trianagle 代码

class Solution {
    public List<List<Integer>> generate(int numRows) {

        Integer[][] a = new Integer[numRows][numRows];
        a[0][0] = 1;
        for(int i=0;i<numRows;i++) {
            a[i][0] = 1;
            for(int j=0;j<=i;j++) {
                if(i == j) 
                    a[i][j] = 1;
                    else {
                        a[i][j] = a[i-1][j-1] + a[i-1][j];
                    }
            }
        }
       return ______;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我应该在 return 语句中写什么?

java

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

如何使用 Perl 将文本文件解析为 csv 文件

我正在学习 Perl,并想使用 Perl 将文本文件解析为 csv 文件。我有一个生成以下文本文件的循环:

//This part is what outputs on the text file
for $row(@$data) {
  while(my($key,$value) = each(%$row)) {
    print "${key}=${value}, ";
  }
  print "\n";
}
Run Code Online (Sandbox Code Playgroud)

文本文件输出:

name=Mary, id=231, age=38, weight=130, height=5.05, speed=26.233, time=30, 
time=25, name=Jose, age=30, id=638, weight=150, height=6.05, speed=20.233, 
age=40, weight=130, name=Mark, id=369, speed=40.555, height=5.07, time=30 
Run Code Online (Sandbox Code Playgroud)

CSV 文件所需的输出:

name,age,weight,height,speed,time
Mary,38,130,5.05,26.233,30, 
Jose,30,150,6.05,20.233,25, 
Mark,40,130,5.04,40.555,30
Run Code Online (Sandbox Code Playgroud)

欢迎任何好的反馈!

csv perl

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

使用sqlite增加锁定超时,默认值是多少?

许多客户端在 sqlite 数据库上查询时的众所周知的问题:数据库被锁定
我想增加在 Linux 上等待锁定释放的延迟(以毫秒为单位),以消除此错误。

从 sqlite-command 中,我可以使用例如(4 秒):

sqlite> .timeout 4000
sqlite>
Run Code Online (Sandbox Code Playgroud)

我已经启动了许多进行选择/插入/删除的进程,如果我不使用 sqlite-command 设置此值,我有时会得到:

sqlite> select * from items where code like '%30';
Error: database is locked
sqlite> 
Run Code Online (Sandbox Code Playgroud)

那么 .timeout 的默认值是多少?

在 Perl 5.10 程序中,我有时也会遇到此错误,尽管默认值似乎是 30.000(所以 30 秒,未记录)。
程序在出现此错误之前实际上等待了 30 秒吗?如果是,这看起来很疯狂,即使该数据库上正在运行许多其他进程,数据库至少有一段时间是空闲的

my $dbh = DBI->connect($database,"","") or die "cannot connect $DBI::errstr";
my $to = $dbh->sqlite_busy_timeout(); # $to get the value 30000
Run Code Online (Sandbox Code Playgroud)

谢谢!

database sqlite perl

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

标签 统计

perl ×9

csv ×1

database ×1

fork ×1

io-redirection ×1

java ×1

quotations ×1

sh ×1

sorting ×1

sqlite ×1

unix ×1