几个月前我开始使用Dist :: Zilla.但是,在YAPC :: NA,有人提到他们使用的是ShipIt.那么今天我在github的 miyagawa的cpanminus目录中注意到了一个.shipit文件,所以我决定再研究一下......
我最初的印象是ShipIt有一个Dist :: Zilla可用的子集,但我不想妄下结论.那么,对于那些对两者都有过经验的人来说,ShipIt vs Dist :: Zilla的优点/缺点是什么?
我的儿子问是否有一种简单的语言可以接受并做一些基础编程.起初我想过QuickBasic,但后来认为我应该向他展示VB.我下载了Visual Basic Express 2008,但我完全迷失了.对象工具栏在哪里?表格在哪里?属性窗格在哪里?
相反,它是商业智能和分析服务.简单的初学者的万能符号指令代码在哪里?
我正在使用以下Perl代码使用该JSON
模块解析JSON中的数组.但返回的数组长度为1,我无法正确迭代它.所以问题是我无法使用返回的数组.
#!/usr/bin/perl
use strict;
my $json_text = '[ {"name" : "abc", "text" : "text1"}, {"name" : "xyz", "text" : "text2"} ]';
use JSON;
use Data::Dumper::Names;
my @decoded_json = decode_json($json_text);
print Dumper(@decoded_json), length(@decoded_json), "\n";
Run Code Online (Sandbox Code Playgroud)
输出来了:
$VAR1 = [
{
'text' => 'text1',
'name' => 'abc'
},
{
'text' => 'text2',
'name' => 'xyz'
}
];
1
Run Code Online (Sandbox Code Playgroud) 在awk
如果我给一个以上的文件作为参数awk
,还有两个特殊的变量:
NR
=与所有文件中的所有行对应的行号.
FNR
=当前文件的行号.
我知道在Perl中,$.
对应于NR
(所有文件中的行之间的当前行).
FNR
在Perl中有没有可与AWK 相媲美的东西?
假设我有一些命令行:
perl -pe 'print filename,<something special which hold the current file's line number>' *.txt
Run Code Online (Sandbox Code Playgroud)
这应该给我输出像:
file1.txt 1
file1.txt 2
file2.txt 1
Run Code Online (Sandbox Code Playgroud) bsub
与 LSF 一起使用时,该-o
选项提供了许多详细信息,例如作业何时开始和结束以及作业占用了多少内存和 CPU 时间。使用 SLURM,我得到的只是在没有 LSF 的情况下运行脚本时得到的相同标准输出。
例如,给定这个 Perl 6 脚本:
warn "standard error stream";
say "standard output stream";
Run Code Online (Sandbox Code Playgroud)
提交如下:
sbatch -o test.o%j -e test.e%j -J test_warn --wrap 'perl6 test.p6'
Run Code Online (Sandbox Code Playgroud)
结果在文件中test.o34380
:
Testing standard output
Run Code Online (Sandbox Code Playgroud)
和文件test.e34380
:
Testing standard Error in block <unit> at test.p6:2
Run Code Online (Sandbox Code Playgroud)
使用 LSF,我会在标准输出文件中获得各种详细信息,例如:
Sender: LSF System <lsfadmin@my_node>
Subject: Job 347511: <test> Done
Job <test> was submitted from host <my_cluster> by user <username> in cluster <my_cluster_act>.
Job was executed on host(s) …
Run Code Online (Sandbox Code Playgroud) Perl6 Rakudo发行版中是否有任何命令列出了系统中所有已安装的模块?
我尝试了以下命令:
p6doc NativeCall
Run Code Online (Sandbox Code Playgroud)
并得到以下错误:
===SORRY!===
Cannot invoke this object (REPR: Uninstantiable)
Run Code Online (Sandbox Code Playgroud)
但是当我写一个包含以下内容的p6文件时:
use NativeCall;
Run Code Online (Sandbox Code Playgroud)
它编译没有问题.
如何浏览这样的Perl 6模块(如perl 5的perldoc)以及如何列出所有已安装的Perl 6模块?
从下面的例子中,我看到/ /
并且m/ /
不完全是同义词,与我的预期相反.我认为唯一的理由使用m/ /
,而不是/ /
是,它允许使用不同的分隔符(如m{ }
).为什么他们不同,为什么我要使用一个与另一个?
我在目录中搜索CSV文件.起初我搜索了以文件结尾的文件csv
(所有代码显示为从Perl 6 REPL中看到的):
> my @csv_files = dir( test => / csv $ / );
["SampleSheet.csv".IO]
Run Code Online (Sandbox Code Playgroud)
但最近出现了一个文件Csv
.所以我尝试不区分大小写:
> my @csv_files = dir( test => m:i/ csv $ / );
Use of uninitialized value of type Any in string context.
Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful.
in block <unit> at <unknown file> …
Run Code Online (Sandbox Code Playgroud) 如果为数组分配未定义的值,它将包含该未定义的值,如果您不想迭代未定义的值,则会使用循环复杂化:
my @bar = 1, 2, Any;
for @bar -> $baz {
put $baz;
}
Run Code Online (Sandbox Code Playgroud)
这给出了以下输出,包括对未定义值的警告:
Run Code Online (Sandbox Code Playgroud)1 2 Use of uninitialized value $baz of type Any in string context. Methods .^name, .perl, .gist, or .say can be used to stringify it to something meaningful. in block at for.p6 line 4
我知道我可以通过多种方式明确地处理这个问题,例如:
for @bar -> $baz {
next unless $baz; # Skip this iteration
put $baz;
}
for @bar.grep: *.defined { # Just iterate over the defined values
put $baz;
} …
Run Code Online (Sandbox Code Playgroud) 我想运行多个Shell进程,但是当我尝试运行63个以上的进程时,它们将挂起。当我max_threads
将线程池减少n
为时,运行n
th shell命令后它将挂起。
正如您在下面的代码中看到的那样,问题不在于start
块本身,而是在start
包含shell
命令的块中:
#!/bin/env perl6
my $*SCHEDULER = ThreadPoolScheduler.new( max_threads => 2 );
my @processes;
# The Promises generated by this loop work as expected when awaited
for @*ARGS -> $item {
@processes.append(
start { say "Planning on processing $item" }
);
}
# The nth Promise generated by the following loop hangs when awaited (where n = max_thread)
for @*ARGS -> $item {
@processes.append(
start { shell …
Run Code Online (Sandbox Code Playgroud) 我最初的计划是使用两个once {next}
块来跳过文件中的前两行(此处将 a 模拟为多行字符串):
for "A\nB\nC\n".lines() -> $line {
once {next}
once {next}
put $line;
}
Run Code Online (Sandbox Code Playgroud)
但它只跳过了一次迭代而不是两次,输出如下:
B
C
Run Code Online (Sandbox Code Playgroud)
而不是我所期望的:
C
Run Code Online (Sandbox Code Playgroud)
显然,单个once {next}
以某种方式取消once
了同一范围内的所有剩余块:
my $guard = 3;
loop {
last if $guard-- <= 0;
once { next };
once { put 'A: once ' };
once { put 'A: once again' };
put 'A: many ';
}
$guard = 3;
loop {
last if $guard-- <= 0;
once { put 'B: once ' }; …
Run Code Online (Sandbox Code Playgroud)