我在 Linux Debian 下运行 Perl 脚本版本 5.28,并带有一些实验性的“扩展”,并出现了奇怪的行为。在混合 Pascal-SQL-Perl 编程会话中,我错过了在 if-else 语句中输入小写字母begin而不是 an else(请参阅下面的测试代码),并得到了有效但出现故障的代码。
我知道大写BEGIN关键字属于BEGIN, UNITCHECK, CHECK, INIT and END程序“程序运行前和程序运行后”组。但我使用了小写begin变体,并且得到了有效的运行代码。在我看来,该begin {...}块是在if (...) {...}表达式之后单独执行的,这会导致不必要的提前返回。
小写字母begin在 Perl 区分大小写的编程上下文中有任何意义吗?
#!/usr/bin/perl
use v5.20;
use strict;
use warnings;
use feature qw(signatures);
no warnings 'once';
no warnings 'experimental';
no warnings 'experimental::signatures';
&if_exotic(1000);
&if_normal(1000);
# --------------------------------------
# Bad variant
# --------------------------------------
sub if_exotic($want) {
if ($want>0) {
print "BAD: ..running $want operations\n";
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 FreeBSD 12 下测试 Rust 1.39 中的一些语言功能,与 Free Pascal 3.0.4 相比,以使用字符串键寻址的 2D 点的简单通用点集合。不幸的是,泛型类型声明的代码没有在很早的状态下编译并停止:
error[E0106]: missing lifetime specifier
--> src/main.rs:11:31
|
11 | type TPointMap = BTreeMap<&TString, TPoint>;
|
Run Code Online (Sandbox Code Playgroud)
我该如何重写 Rust 代码?
细节:
为了测试语言行为,我用 Rust 和 Pascal 编写了两个小程序,以“语法上”处理相同的上下文。Pascal 程序是一个简单的声明:
STDIO program test;
uses fgl; { Use the free pascal generics library }
type
TDouble = Double; { Define a 64 bit float }
TString = String; { Define a string type }
TPoint = record { Define …Run Code Online (Sandbox Code Playgroud) 我尝试在 Linux 下混合 bash 命令行工具和管道中的 Perl 命令来过滤配置文件中的表达式。
我有一个配置文件(请参阅配置部分),可以使用 ` 过滤相关行
grep PG.DATABASE database.conf | \
sed -r -e 's/^\s*//;s/\s+/ /' | \
cut -d ' ' -f2 | \
sort
Run Code Online (Sandbox Code Playgroud)
并得到预期的结果:
DB.GRM.CON.LOCAL.V01
DB.GRM.CON.LOCAL.V02
DB.GRM.CON.LOCAL.V03
Run Code Online (Sandbox Code Playgroud)
现在我想切换到 Perl
DB.GRM.CON.LOCAL.V01
DB.GRM.CON.LOCAL.V02
DB.GRM.CON.LOCAL.V03
Run Code Online (Sandbox Code Playgroud)
但由于输入行重复,我得到了奇怪的结果。
DB.GRM.CON.LOCAL.V01
PG.DATABASE: DB.GRM.CON.LOCAL.V01 BEGIN
DB.GRM.CON.LOCAL.V02
PG.DATABASE: DB.GRM.CON.LOCAL.V02 BEGIN
DB.GRM.CON.LOCAL.V03
PG.DATABASE: DB.GRM.CON.LOCAL.V03 BEGIN
Run Code Online (Sandbox Code Playgroud)
为什么会出现重复,并且使用命令行工具获得的结果是否是正确的 Perl oneliner?
PG.CONFIG: DEFAULT BEGIN
# Green Rebel Database via PG.SERVICE ------------------------
PG.DATABASE: DB.GRM.CON.LOCAL.V01 BEGIN
SERVICE: 'LOC-GRM-V0'
END.DB.GRM.CON.LOCAL.V01
# Green Rebel Database via DBI Driver …Run Code Online (Sandbox Code Playgroud)