我有一个看起来像这样的文件:
AE United Arab Emirates
AG Antigua & Barbuda
AN Netherlands Antilles
AS American Samoa
BA Bosnia and Herzegovina
BF Burkina Faso
BN Brunei Darussalam
Run Code Online (Sandbox Code Playgroud)
我想颠倒订单,先打印除1美元以外的所有商品,然后再打印1美元:
United Arab Emirates AE
Run Code Online (Sandbox Code Playgroud)
我怎么能做"除了场1之外的一切"技巧?
Perl 可以:
perl -le '$d=1; while(1){ $d/=2 and ++$i or last } print "i=$i"'
Run Code Online (Sandbox Code Playgroud)
但不是:
perl -le '$d=1; $d/=2 and ++$i or last while 1; print "i=$i"'
Run Code Online (Sandbox Code Playgroud)
这导致:
Can't "last" outside a loop block at -e line 1.
Run Code Online (Sandbox Code Playgroud)
这是一般情况还是此特定语句中的某些内容阻止了last此处?没有perl的使用能够做到last语句修饰(while/ until/for在早期版本在结束)?我现在在 v5.26 上进行了测试,并且没有现成的旧版本。
示例:我想删除重复的字符,$s如下所示:
my $s = 'aabbbcbbac';
1 while $s =~ s/((.).*)\2/$1/;
print $s, "\n"; #prints abc
Run Code Online (Sandbox Code Playgroud)
是否有一种简单而简短的方法可以避免这个1 while伎俩,并且只删除一个重复项s///g?让它以某种方式"重新开始"?通过使用\G或某种后视| -ahead?只是添加/g不是这里的解决方案.
perl -E 'say for map s/(æ|ø|å)/ {qw(æ ae ø oe å aa)}->{$1}/ger, qw(rød gul blå)'
perl -E 'say for map s/(æ|ø|å)/"".{qw(æ ae ø oe å aa)}->{$1}/ger, qw(rød gul blå)'
Run Code Online (Sandbox Code Playgroud)
上面的第一行给了我,syntax error at -e line 1, near "}->"但第二行给了我roed,gul与blaa预期的一样。这是编译器的弱点,还是有我看不见的某些原因?我测试并在版本5.10、5.22和5.26中获得了此行为。
这个 Postgres 数据库拥有各种大小的表,最多可达 1000 万行。几乎所有的都有一个 BIGINT 主键,从 1 开始计数。
由于 BIGINT 是 64 位,但 1000 万行完全在 INT 的 20 亿最大值之内,因此是否值得将这些 BIGINT 列转换为 INT(32 位)和 SMALLINT(16 位)以加速某些重型 SQL?更紧凑地存储索引/表应该会给我们带来更高的缓存命中率。如果有的话,我能期望多少加速?不使用 BIGINT 有什么缺点吗?(假设达到 INT/SMALLINT 的最大值永远不会成为问题)
我喜欢在我的~/.psqlrc:
\set autocommit off
Run Code Online (Sandbox Code Playgroud)
我也喜欢我的filename.sql脚本顶部的这个:
BEGIN;
Run Code Online (Sandbox Code Playgroud)
...以防这些脚本由使用自动提交的其他人运行。
但是,这会发出警告:
WARNING: there is already a transaction in progress
Run Code Online (Sandbox Code Playgroud)
如何关闭那些烦人的警告?有什么BEGIN IF NOT ALREADY BEGUN命令吗?
我在调用一个类似于下面的测试的只有一个字母的 sub 时遇到了问题。而且我无法找到一些允许字母而不是这里的逻辑。有没有?我明白为什么sub m是一个坏主意,因为它与m(regex), 等价的/regex/. 但为什么是其他人?
在下面的测试中,a、D、E、F 都可以。其余的syntax error根据 perl v5.26 和 v5.30(我检查的唯一两个版本)
perl -le'sub a{3*pop} print "a: ",a(7)-a(5)' #prints 6
perl -le'sub b{3*pop} print "b: ",b(7)-b(5)' #syntax error
perl -le'sub c{3*pop} print "c: ",c(7)-c(5)' #syntax error
perl -le'sub d{3*pop} print "d: ",d(7)-d(5)' #syntax error
perl -le'sub e{3*pop} print "e: ",e(7)-e(5)' #syntax error
perl -le'sub f{3*pop} print "f: ",f(7)-f(5)' #syntax error
perl -le'sub A{3*pop} print "A: ",A(7)-A(5)' #syntax error
perl -le'sub B{3*pop} …Run Code Online (Sandbox Code Playgroud) perl ×5
postgresql ×2
autocommit ×1
awk ×1
database ×1
hashref ×1
psql ×1
reference ×1
regex ×1
sed ×1