小编caj*_*ine的帖子

使用perl将JSON :: PP :: Boolean转换为0,1的正确和简单方法

尝试转换JSONYAML.有这个代码

#!/usr/bin/env perl

use 5.014;
use warnings;

use JSON;
use YAML;

my $json_string = q(
{
   "some" : [
      { "isFlagged" : true, "name" : "Some name" },
      { "isFlagged" : false, "name" : "Some other name" }
   ]
}
);

my $data = decode_json($json_string);
say Dump($data);
Run Code Online (Sandbox Code Playgroud)

它产生:

---
some:
  - isFlagged: !!perl/scalar:JSON::PP::Boolean 1
    name: Some name
  - isFlagged: !!perl/scalar:JSON::PP::Boolean 0
    name: Some other name
Run Code Online (Sandbox Code Playgroud)

我需要将JSON::PP::Boolean对象转换为01.当然,我可以!!perl/scalar:JSON::PP::BooleanYAML输出中删除每个字符串,但在我看来这不是一个正确的解决方案. …

perl json yaml

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

匹配以在 bash 中全局捕获组

有这个非常简单的 perl 脚本:

use strict;
use feature 'say';
use warnings;

my $str = q{some [values] in string [enclosed] [in some] number of [square brackets]};
my @matches;
if(my $num =(@matches)= $str =~ / \[ (.*?) \] /gsx ) {
        say "got $num matches:";
        say "[$_]" for @matches;
}
Run Code Online (Sandbox Code Playgroud)

它打印:

got 4 matches:
[values]
[enclosed]
[in some]
[square brackets]
Run Code Online (Sandbox Code Playgroud)

如何实现类似 in 的东西bash

Ps:没有提供任何 bash 代码,因为我什至不知道如何开始。该${BASH_REMATCH[@]}不会在一线工作的全局......对于使用BASH_REMATCH需要提前知道cature组的数量。所以,不知道...... :( 我能做到的最接近的是:

str='some [values] in string [enclosed] [in some] number of …
Run Code Online (Sandbox Code Playgroud)

bash

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

Perl正则表达式 - 删除除字母数字字符和逗号之外的所有字符

我有以下代码:

my $str = 'Uploaded 07-02?05:14, Size 212.14?MiB, ULed by someone';
print "Pre:".$str."\n";
my $str =~ s/^[a-zA-z0-9,]//g;
print "Post:".$str."\n";
Run Code Online (Sandbox Code Playgroud)

我的目的是删除那些特殊的字符和空格,以便我可以拆分字符串进行进一步处理.

使用上面的正则表达式,我试图删除除字母数字字符和逗号之外的所有字符.不幸的是,我得到一个空白.我是正则表达式的初学者,想知道我的表达方式有什么问题.

regex perl

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

区分perl中的字符串和数字参数

如何解决以下问题?

use 5.014;
use warnings;
use Test::Simple tests => 4;

ok( doit(0123)   == 83, "arg as octal number" );
ok( doit(83)     == 83, "arg as decimal number" );
ok( doit('0123') == 83, "arg as string with leading zero" );
ok( doit('123')  == 83, "arg as string without leading zero" );

sub doit {
    my $x = shift;
    return $x;                                     # how to replace this line
    #return  got_the_arg_as_string ? oct($x) : $x; # with something like this
}
Run Code Online (Sandbox Code Playgroud)

例如,如果我向doit子传递任何字符串 …

perl

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

重复文件内容,直到达到定义的行数

有一个这样的文件下一个 file.txt

line-01
line-02
line-03
line-04
line-05
line-06
line-07
line-08
line-09
line-10
Run Code Online (Sandbox Code Playgroud)

这包含10个统一的行,真实文件具有不同的内容和不同的行数.

需要重复此文件的内容,util达到定义的行数.

尝试下一个脚本:

repcat() {
    while :
    do
        cat $1
    done
}

repcat file.txt | head -20
Run Code Online (Sandbox Code Playgroud)

它工作,打印20行,但永远不会结束,需要用CTRL-C终止.

为什么repcat继续写入管道,在没有人读取结果的情况下?

更奇怪的是,添加一个echo之后cat

repcat() {
        while :
        do
                cat $1
                echo xxx
        done
}

repcat file.txt | head -20
Run Code Online (Sandbox Code Playgroud)

脚本结束.

不明白为什么会这样的行为.

bash

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

标签 统计

perl ×3

bash ×2

json ×1

regex ×1

yaml ×1