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 "}->"但第二行给了我roed,gul与blaa预期的一样。这是编译器的弱点,还是有我看不见的某些原因?我测试并在版本5.10、5.22和5.26中获得了此行为。
我有两个目录,每个目录都有一个文件:
$ 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 脚本,它显然是以一种我不理解的方式设置 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(或防止弄乱它的代码弄乱它)。但我想通过更好地了解它现在如何选择版本来解决这个问题。
谢谢你的帮助 !
我正在努力更好地学习 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)
我很困惑,因为会有两个$_,我无法对其进行相等测试。
我试图在另一个正则表达式中使用字符串作为正则表达式:
my $e = "a+b";
if ('foo a+b bar' =~ /foo ${e} bar/) {
print 'match!';
}
Run Code Online (Sandbox Code Playgroud)
不起作用,因为 Perl 将其视为+特殊字符。如何在不改变 的值的情况下逃脱它$e?
我有一组包含示例数据的文件,如下所示,我需要转换数据以将所有对象文件(以下)放在-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) 我有重复分隔符(逗号)的问题
字符串输入
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) 当父母被杀时,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) 我分叉了几个流程,我需要每个流程来对随机选择的项目执行任务。我发现分叉的进程选择完全相同的随机数。我尝试生成种子并调用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) 假设有一个数组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 语句中写什么?