小编Pau*_*kov的帖子

观察Perl类中属性的更改

任何人都可以提供一个代码示例,如何在类中设置变量更改的观察者?我试图用几种方式使用不同的功能(Scalar :: Watcher,Moo的触发属性)和OOP框架(Moo,Mojo :: Base),但都失败了.

以下是我失败的代码,以便更好地理解我的任务.在这个例子中,我需要每次更改attr1时更新attr2.

使用Mojo :: Base和Scalar :: Watcher:

package Cat;
use Mojo::Base -base;
use Scalar::Watcher qw(when_modified);
use feature 'say';

has 'attr1' => 1;
has 'attr2' => 2;

has 'test' => sub { # "fake" attribute for getting access to $self
  my $self = shift;
  when_modified $self->attr1, sub { $self->attr2(3); say "meow" };
};


package main;
use Data::Dumper;

my $me = Cat->new;
$me->attr1;
warn Dumper $me;
say $me->attr1(3)->attr2; # attr2 is still 2, but …
Run Code Online (Sandbox Code Playgroud)

oop perl watch mojolicious moo

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

docker-in-docker 卷上的 $(pwd) 挂载意外目录

例子:

pavel@Z546:~/test/dind-volumes$ ls
test.txt
pavel@Z546:~/test/dind-volumes$ docker run -v /var/run/docker.sock:/var/run/docker.sock -v $(pwd):/app -w /app -it docker sh
/app # ls
test.txt
/app # pwd
/app
/app # docker run -v $(pwd):/app2 -w /app2 -it alpine sh
/app2 # ls
share       tomita-cfg
/app2 # pwd
/app2
Run Code Online (Sandbox Code Playgroud)

安装在哪个位置-v $(pwd):/app2?它不在~/test/dind-volumes主机操作系统上。sharetomita-cfg来自主机操作系统的文件夹,但路径完全不同,甚至不是从~

docker docker-volume docker-in-docker

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

Perl变量在没有任何写入的情况下发生变化

我有以下脚本:

use Modern::Perl;
use List::Compare;
use Set::IntSpan;
use List::Util qw/first/;
use List::MoreUtils qw/firstidx onlyidx/;
use Data::Dumper;

sub get_index_by_data {
    my ( $data, $arr ) = @_;
    return onlyidx { $_ eq $data } @$arr;
}

sub detect_busy_intervals {
  my %params = @_;

  $params{epoch_key} = 'epoch' if ( !defined $params{epoch_key} ) ;

  my @all_epochs = @ { $params{all_epochs} };
  my @free_epochs = map { $_->{ $params{epoch_key} } } @{ $params{data} };
  my $lc = List::Compare->new( $params{all_epochs}, \@free_epochs );
  my @busy_epochs = …
Run Code Online (Sandbox Code Playgroud)

perl

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

是否可以在不支持关联数组的情况下编译 Bash 5?

测试我的 bash 脚本的同事向我发送了此屏幕截图

没有关联数组的 ba​​sh5

bash从 brew安装。有可能declare没有-A选项bash:5吗?

我用 docker 检查过,bash:5必须有-A

$ docker run -it bash:5
bash-5.0# declare -A
declare -A BASH_ALIASES=()
declare -A BASH_CMDS=()
Run Code Online (Sandbox Code Playgroud)

bash:3当没有关联数组支持时,屏幕截图类似于输出:

$ docker run -it bash:3
bash-3.2# declare -A
bash: declare: -A: invalid option
declare: usage: declare [-afFirtx] [-p] [name[=value] ...]
Run Code Online (Sandbox Code Playgroud)

是否可以在bash:5没有关联数组支持的情况下进行编译?

bash自制程序包的页面,我在./configureFormula ruby​​ 安装脚本部分没有找到任何特殊选项。

macos bash homebrew configure

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

删除perl字符串中所有前导零的最优雅,最快的方法

我编写了rmlz用于修剪字符串中所有前导零的函数。

# remove all leading zeroes from string
use strict;
use warnings;
use feature 'say';

sub rmlz {
  my ( $str ) = @_;
  if ( $str =~ /^(.[0])/ ) {
    return substr( $str, length($1));
  }
  return $str;
}

say rmlz('0050625'); # must return 50625
Run Code Online (Sandbox Code Playgroud)

有没有最优雅,最清晰的方法来重写此代码?还是regexp + length + substr是最好的选择?

string perl substring

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

无法设置 lxc.apparmor.profile

我无法禁用 lxc 容器的 apparmor:

$ lxc launch images:centos/7 a1
Creating a1
Starting a1
$ lxc config set a1 lxc.apparmor.profile unconfined
Error: Invalid config: Unknown configuration key: lxc.apparmor.profile
$ lxc --version
3.0.3
Run Code Online (Sandbox Code Playgroud)

出了什么问题以及如何设置属性?

apparmor lxc

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

使用 Perl 解析 JavaScript:从 JE->parse 获取“undef”

我有 Javascript 代码,我需要将 javascript 变量解析为 perl 哈希。有没有现成的模块?我尝试了JE::parse()JavaScript::HashRef::Decode但都没有奏效。

预期行为:

use Data::Dumper;
use SomeModule::ParseJSVariables qw/decode_js/;

my $str = qq/
var data = {
    'abc': 1,
    'def' : 2
    'xyz' : { 'foo' : 'bar' }
}
/;

my $res = decode_js($str);
warn Dumper $res; #

# expected result: 
# { 
#   name => 'data', 
#   value => {
#     'abc' => 1,
#     'def' => 2
#     'xyz' => { 'foo' => 'bar' }
#     }
# } …
Run Code Online (Sandbox Code Playgroud)

javascript perl parsing static-code-analysis

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