docker ps --format "table {{.Names}}"NAMES第一行输出:
root@docker-2gb-blr1-01:~# docker ps --format "table {{.Names}}"
NAMES
enr
osticket
osticket_db
...
Run Code Online (Sandbox Code Playgroud)
docker inspect --format '{{.Name}}' $(docker ps -q)
/在容器名称的开头打印:
root@docker-2gb-blr1-01:~# docker inspect --format '{{.Name}}' $(docker ps -q)"
/enr
/osticket
/osticket_db
Run Code Online (Sandbox Code Playgroud)
我想只列出正在运行的容器的名称,在开头没有标题或斜杠.请分享选项如何执行此操作.
例如:我想找到Dockerfile其存储库中的所有 CRM 。
我检查了github help,但没有找到任何合适的搜索限定符。有只是filename:and in:file:,但它不是我想要的,我需要类似has_file:或in:filename
任何解决方法?
例如我有以下 Perl 脚本
{
package A;
{
package B;
sub _y {
print "Just Another Perl Hacker\n";
}
}
sub _x {
print "Hello world!\n";
B::_y();
}
}
use strict;
use warnings;
_x();
Run Code Online (Sandbox Code Playgroud)
如何将带有包限定符的每个执行子打印到 STDERR 或任何日志文件?
例如,从上面的脚本中,我希望看到以下输出:
1 A::_x()
2 B::_y()
Run Code Online (Sandbox Code Playgroud)
我认为可以使用像 Devel::NYTProf 这样的调试器,但我还没有找到特定的调试器模块或它们的参数来完成这个简单的任务。
有任何想法吗?
是吗
[A-Za-z]以及::模块名称
对于[A-Za-z_-]子程序名称?
PS 我正在编写正则表达式来解析一些调试输出。
Tie::CPAN 上有很多带命名空间的模块- Tie :: Hash,Tie :: Sub,Tie :: Cache,Tie :: DBI等.它们之间有什么共同之处?
我检查了perltie但是我不确定我是否理解这个概念.有人可以解释一下吗?
我有一个哈希,例如$hash->{'foo'}{'bar'}.
我想Carp::cluck在bar密钥值发生变化的任何地方打电话.
怎么做 ?在CPAN上有没有可以做到这一点的现成模块?
这个例子工作正常:
use File::Slurp qw(read_file);
local *File::Slurp::read_file = sub {
return 'test';
};
warn File::Slurp::read_file('/root/test.txt'); # return 'test'
Run Code Online (Sandbox Code Playgroud)
这个也是:
use File::Slurp qw(read_file);
local *read_file = sub {
return 'test';
};
warn read_file('/root/test.txt'); # return 'test'
Run Code Online (Sandbox Code Playgroud)
但是如果我在typeglob中使用函数的全名它不起作用并尝试读取文件:
use File::Slurp qw(read_file);
local *File::Slurp::read_file = sub {
return 'test';
};
warn read_file('/root/test.txt');
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么我不能通过完整命名空间重新定义子程序File::Slurp::read_file,并使用短名称?
在对象方法的情况下,它工作正常:
use LWP::UserAgent;
local *LWP::UserAgent::get = sub {
return HTTP::Response->new( undef, undef, undef, 'Hello world' );
};
my $ua = LWP::UserAgent->new;
warn $ua->get()->content;
Run Code Online (Sandbox Code Playgroud) 我正在使用标准Perl调试器来跟踪调用:
$ cat test.pl
sub test { print "Hello world" }
test();
$ PERLDB_OPTS="NonStop frame=1" perl -d test.pl > /dev/null
Package test.pl.
entering DB::Obj::_init
entering main::test
Run Code Online (Sandbox Code Playgroud)
如何将输出重定向到文件?
如果我做
PERLDB_OPTS="NonStop frame=1" perl -d test.pl > /dev/null 2>trace.txt
Run Code Online (Sandbox Code Playgroud)
trace.txt 是空的.
它看起来不像在标准流上打印的调试输出(STDERR或STDOUT).
让我用代码示例解释任务:
#!/usr/bin/perl
use strict;
use warnings;
my $t = 3;
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
print "Start $t\n";
alarm(10);
sleep($t); # instead of this I have some data that collect code
alarm(0);
print "done with $t\n";
};
if ($@) {
die unless $@ eq "alarm\n";
print "timeout\n";
}
Run Code Online (Sandbox Code Playgroud)
而不是sleep我有一些代码将数据推送到数组.在x秒期间,数组将保证由所需数据填充.
问题:如何在x第二次打印数组后,不使用sleep(非阻塞方式)?
据我所知,在perl中设置计时器的最简单方法就是使用$SIG{ALRM}.但是如果我不需要定时器(不能使用sleep)该怎么办,我只需要设置一个必须在预定义的秒数后运行的中断?也许我应该用SIGINT这个任务?
任何帮助赞赏.
让我们考虑一下简单的Perl代码:
my @x = ( 1, 5, 9);
for my $i ( 0 .. $#x ) {
splice( @x, $i, 1 ) if ( $x[$i] >= 5 );
}
print "@x";
Run Code Online (Sandbox Code Playgroud)
输出不正确,1 9但必须有1
如果我们使用-wflag 运行代码,则会打印警告
Use of uninitialized value within @x in numeric ge (>=) at splice.pl line 5.
Run Code Online (Sandbox Code Playgroud)
那么,使用条件拼接并且更好地将结果推入新变量并不是一个好习惯吗?