我有一个我要拆分的字符串.但是分隔符是在运行时确定的,因此我需要将其作为变量传递.
有点像my @fields = split(/$delimiter/,$string);不起作用.有什么想法吗?
输入:
abcd|efgh|23
Run Code Online (Sandbox Code Playgroud)
预期产出:
abcd
efgh
23
Run Code Online (Sandbox Code Playgroud) 我想输出一个包含四个变量的表,所需格式的示例是:
A confusion matrix
H | P |
-----------------------
$var1 | $var2 | H
$var3 | $var4 | P
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,根据变量中的位数,格式会发生变化,各行都会偏移.我知道这是一个完整的noobie问题,但我从来没有过多地关注输出的格式,这只是我想要正确的一件小事.任何帮助都会很棒,谢谢.
perl -Mbigrat -E'for (1..100) { $i += 1/3; say int($i), "\t", sprintf "%.55f", $i }'
Run Code Online (Sandbox Code Playgroud)
发出很多警告:
Argument "100/3" isn't numeric in addition (+) at …/site_perl/5.24.1/Math/BigRat.pm line 1939.
Run Code Online (Sandbox Code Playgroud)
在没有-Mbigrat的情况下再次运行以查看sprintf的预期效果.
你如何将BigRat实例$ i降级为一个普通的NV,可以选择sprintf?
版本:
使用键入的键进行哈希...
use v6;
class Foo {}
my Hash[Foo, Foo] $MAP;
my $f1 = Foo.new;
my $f2 = Foo.new;
$MAP{$f1} = $f2;
Run Code Online (Sandbox Code Playgroud)
产生错误:
方法“ASSIGN-KEY”的调用者必须是“Hash[Foo,Foo]”类型的对象实例,而不是“Hash[Foo,Foo]”类型的类型对象。你忘记了'.new'吗?
我觉得它具有误导性;真正的错误是什么,我必须写什么?
我已经尝试过%哈希变量的符号,这也不起作用。
我正在围绕REST Web服务编写一个Perl包装器模块,我希望能够就如何最好地构建模块提供一些建议.
我一直在寻找几个不同的Perl模块以获得灵感.
Flickr::Simple2基本上是一个大文件,其中的方法包含Flickr API中的不同方法,例如getPhotos()等.
Flickr::API是用于发出HTTP请求的另一个模块(LWP)的子类.因此,基本上它只允许您使用LWP通过模块进行调用,该模块转到正确的API方法/ URL,而无需自己定义任何包装器方法.这解释得很差 - 但基本上它有一个方法,它接受一个参数(一个API方法名称)并构造正确的API调用,例如request()/ response().
替代设计将类似于第一次描述,但不那么单一,具有用于API的单独"区域"的单独类.
我想遵循现代/最佳实践Perl方法,所以我Dist::Zilla用来构建模块和MooseOO的东西,但我很欣赏一些关于如何实际设计/构建我的包装器的输入.
指南/教程或指向其他精心设计的模块的指南将不胜感激.
干杯
"更好"主要意味着准确性,但我也对其他系统擅长的任何其他标准感兴趣.我Text::Kakasi以一种公认有限的方式对Perl绑定进行了正确的采样,它可以很好地满足我们的需求.
use utf8;
use Encode;
use Text::Kakasi;
use Unicode::Collate;
my $k = Text::Kakasi->new(qw(-iutf8 -outf8 -JH));
my $c = Unicode::Collate->new;
print encode_utf8 $_ for
map { $_->[0] }
sort { $c->cmp($a->[1], $b->[1]) }
map { [$_, $k->get($_)] }
<DATA>;
__DATA__
???????
????????
?????
??
????????
??
???????
??
??
Run Code Online (Sandbox Code Playgroud) 在第4章第4.8节(计算联盟,交集或唯一列表的差异)中,Perl Cookbook提供了这种技术来获取两个整数列表的交集:
@a = (1, 3, 5, 6, 7, 8);
@b = (2, 3, 5, 7, 9);
...
foreach $e (@a, @b) {
$union{$e}++ && $isect{$e}++
}
@union = keys %union;
@isect = keys %isect;
Run Code Online (Sandbox Code Playgroud)
我想要为两个字符串列表完成(不区分大小写).请问有效的方法吗?
我一直在研究阵列切片,坦率地说,没有看到选择@array[1]和之间的区别$array[1].有区别吗?
#!/usr/bin/perl
@array = (1,3);
print "\nPrinting out full array..\@array\n";
print "@array\n";
print "\n";
print "Printing out \@array[1]\n";
print "@array[1]\n";
print "Printing out \$array[1]\n";
print "$array[1]\n";
print "\n\n";
Run Code Online (Sandbox Code Playgroud) 乐堂版本 2020.01
我正在编写一些一次性代码,并没有费心去实现一个类,只是使用了一个 Hash 作为工作方式。我在列表中发现了一些令人惊讶的行为。
class Q1 {}
class R1 {
has Str $.some-str is required;
has @.some-list is required;
}
my $r1 = R1.new(
some-str => '…',
some-list => (Q1.new, Q1.new, Q1.new)
);
# hash as poor man's class
my $r2 = {
some-str => '…',
some-list => (Q1.new, Q1.new, Q1.new)
};
multi sub frob(R1 $r1) {
for #`(Array) $r1.some-list -> $elem {
$elem.raku.say;
}
}
multi sub frob(Hash $r2) {
for #`(List) $r2<some-list> -> $elem {
$elem.raku.say;
} …Run Code Online (Sandbox Code Playgroud) 在我的Perl脚本中,我获得了可能包含环境变量的文件路径字符串,例如$FONTS/test.ttf或$TMP/file.txt.
我现在想要打开这样的文件:
open my $handle, "<$filename" or die $!;
Run Code Online (Sandbox Code Playgroud)
我现在如何在打开调用之前扩展环境变量,例如bash shell会做什么?