当父母被杀时,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) 正如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 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只有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) 我有一个大的数据文件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扫描需要很长时间.
有没有办法将定义的变量用作文件句柄?
我在一个示例脚本中找到了它,然后我从Google搜索并找到了以下单词,
请注意,您不能简单地将STDERR打开为Perl程序中STDOUT的副本,并避免调用Shell进行重定向。这不起作用:
Run Code Online (Sandbox Code Playgroud)open(STDERR, ">&STDOUT");之所以失败,是因为open()使STDERR转到open()时STDOUT所在的位置。然后,反引号使STDOUT转到字符串,但不要更改STDERR(仍将其转到旧的STDOUT)。
现在我很困惑。到底是什么意思open(STDERR, ">&STDOUT");?
我有一个逗号分隔的文本文件。我想先按第 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) 假设有一个数组Integer[][] a;
那么在java 8中如何将其转换a为List<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 语句中写什么?
我正在学习 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)
欢迎任何好的反馈!
许多客户端在 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)
谢谢!