小编zdi*_*dim的帖子

hashref查找中的语法错误,看不到原因

perl -E 'say for map s/(æ|ø|å)/   {qw(æ ae ø oe å aa)}->{$1}/ger, qw(rød gul blå)'
perl -E 'say for map s/(æ|ø|å)/"".{qw(æ ae ø oe å aa)}->{$1}/ger, qw(rød gul blå)'
Run Code Online (Sandbox Code Playgroud)

上面的第一行给了我,syntax error at -e line 1, near "}->"但第二行给了我roedgulblaa预期的一样。这是编译器的弱点,还是有我看不见的某些原因?我测试并在版本5.10、5.22和5.26中获得了此行为。

perl reference hashref

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

Perl glob、qq() 和方括号 []

我有两个目录,每个目录都有一个文件:

$ ls -l "test dir["
-rw-r--r--  1 root  media     0B 11 Dec 16:53 .ignoreme
Run Code Online (Sandbox Code Playgroud)

$ ls -l "test [dir]"
-rw-r--r--  1 root  media     0B 11 Dec 16:34 .ignoreme
Run Code Online (Sandbox Code Playgroud)

我正在使用 Perl 来测试“.ignoreme”文件是否存在:

$ perl -e '$d="test dir["; print -e glob qq("$d"/.ignore*); print "\n";'
1 
Run Code Online (Sandbox Code Playgroud)

哪个有效,以及

$ perl -e '$d="test [dir]"; print -e glob qq("$d"/.ignore*); print "\n";'

Run Code Online (Sandbox Code Playgroud)

哪个没有。

我猜这与这[]对有关,但我不确定相互作用。有人可以请教我。我也很感谢修复以匹配任何$d包含[].

perl glob string-interpolation

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

如何:# use perl eval 'exec perl -S $0 ${1+"$@"}' 设置 perl 版本?

我必须调试一个旧的 perl 脚本,它显然是以一种我不理解的方式设置 perl 的版本......

: # use perl
    eval 'exec perl -S $0 ${1+"$@"}'
    if 0;
Run Code Online (Sandbox Code Playgroud)

perl -h说这-S意味着“使用 PATH 环境变量查找程序文件”。 $0是当前程序。我读过这$@意味着“来自最后一个eval命令的 Perl 语法错误消息”。但是他们为什么要加 1 呢?这一切是如何结合在一起的?它在做什么?

我必须调试的部分内容与它选择了我不想要的旧版本 perl 的事实有关。对于其他一切,我们使用#!/usr/bin/env perl它,我怀疑,可能会做同样的事情。我还怀疑我的解决方案可能在于修复$PATH(或防止弄乱它的代码弄乱它)。但我想通过更好地了解它现在如何选择版本来解决这个问题。

谢谢你的帮助 !

shell perl

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

Perl 多命令 grep 与 $_

我正在努力更好地学习 Perl grep

我想 grep 哈希的哪些键不在数组

my %args = ( fake => 1);
my @defined_args = ('color', 'colors', 'data', 'figheight', 'figwidth', 'filename', 'flip', 'grid', 'labelsize', 'logscale', 'minor_gridlines');
my @bad_args = grep { not grep {$_} @defined_args} keys %args;
Run Code Online (Sandbox Code Playgroud)

@bad_args 最后一行中的坏参数列表显然是错误的。

我知道我可以用哈希做同样的事情,但我希望能够用多阶 grep 来做到这一点,即 grep on grep 。

我怎样才能像下面这样做到这一点?

my @bad_args = grep { not grep {$_ eq $_} @defined_args} keys %args;
Run Code Online (Sandbox Code Playgroud)

我很困惑,因为会有两个$_,我无法对其进行相等测试。

perl grep

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

当我将正则表达式包含在另一个正则表达式中时,如何转义它?

我试图在另一个正则表达式中使用字符串作为正则表达式:

my $e = "a+b";
if ('foo a+b bar' =~ /foo ${e} bar/) {
    print 'match!';
}
Run Code Online (Sandbox Code Playgroud)

不起作用,因为 Perl 将其视为+特殊字符。如何在不改变 的值的情况下逃脱它$e

regex perl

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

perl oneliner 在同一打印语句中打印数组和其他匹配项

我有一组包含示例数据的文件,如下所示,我需要转换数据以将所有对象文件(以下)放在-o第一列中,将链接库(以下)-l放在第二列中。这个格式在整个make输出中是一致的。

hello there -o one two three four -labc -lfoo -lbar
something useless -o abc doo zoo  -lkoo -lfoo -lmoo
Run Code Online (Sandbox Code Playgroud)

我正在尝试将其解析为更简单的格式以进行进一步处理:

one two three four, abc foo bar
abc doo zoo, koo foo moo
Run Code Online (Sandbox Code Playgroud)

我正在尝试这个,显然这不是我想要得到的:

perl  -ne '/-o(.*?)-/m; @libs = /-l([^ ]+)/gs; printf "%s %s\n", $1 , join(", ", @libs);' inputfile
bar
 abc, foo, bar

moo
 koo, foo, moo
Run Code Online (Sandbox Code Playgroud)

在这里,我尝试将所有对象存储到数组中$1并将所有库存储到@libs数组中。只有库被正确打印,但对象不正确,有人可以帮助修复它吗?我单独验证了它$1是否具有正确的值。

perl  -wne '/-o(.*?)-/m;  printf "%s %s\n", $1, " "' inputfile …
Run Code Online (Sandbox Code Playgroud)

regex perl

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

Perl 重复分隔符(逗号)的分割问题

我有重复分隔符(逗号)的问题

字符串输入

abc : {A=[2, 2, 2], B=x, C=[1, 1, 1, 1], D=1}
Run Code Online (Sandbox Code Playgroud)

我的代码

if ($_ =~ /^(\w+)\s+:\s+\{(\S+=.*)\}/)
{
  my $attr_struct = $1; 
  my $sub_attr_struct = $2;
  $sub_attr_struct =~ s/,\s+/,/g;
  my @sub_attr_struct_split = split(',',$sub_attr_struct);
  foreach my $attr (@sub_attr_struct_split)
   {
    print "$attr_struct".".$attr\n";  
   }
 }
Run Code Online (Sandbox Code Playgroud)

预期输出是

abc.A=2:2:2
abc.B=x
abc.C=1:1:1:1 
abc.D=1
Run Code Online (Sandbox Code Playgroud)

regex perl split

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

当父母被杀时杀死孩子

当父母被杀时,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
查看次数

如何在分叉过程中获得随机数?

我分叉了几个流程,我需要每个流程来对随机选择的项目执行任务。我发现分叉的进程选择完全相同的随机数。我尝试生成种子并调用srand(),但并没有太大帮助。实际上,我阅读过的大多数文档都建议避免srand(),“除非您确切地知道自己在做什么”。

这是我的代码:

#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long qw(GetOptions);
use Time::HiRes qw(time);
use MongoDB;
#use Math::Random::Secure qw(rand);

my $num_clients = shift;
my $num_loops = 50_000_000;

sub test_forked_sub {
    my $sum=0;
    my $random_offset = rand(120);
    printf "time: %10.4f -  Random offset: %6.2f at pid: %s  \n", time(), $random_offset, $$;
    for (my $i=0; $i < $num_loops  ; $i++) {
        $sum += rand(120);
    }
}

my $nub_processes = 0;
for (my $client_id =0; $client_id < $num_clients; $client_id++ ) {
    if (my $pid …
Run Code Online (Sandbox Code Playgroud)

random perl fork random-seed

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

如何在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
查看次数