小编huc*_*inn的帖子

小写“begin”是 Perl 关键字吗?

我在 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)

perl keyword

3
推荐指数
1
解决办法
101
查看次数

如何在 Rust 中正确设置泛型集合类型

我正在尝试在 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 程序是一个简单的声明:

  1. 一些普通类型、记录类型和通用地图容器,
  2. 这将被用来定义一个点,将这个点存储在一个新分配的地图中,
  3. 通过键搜索点并将数据写入 STDIO
  4. 最后释放地图。
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)

generics rust

2
推荐指数
1
解决办法
343
查看次数

使用 Perl 的列过滤器表达式的正确在线者是什么?

我尝试在 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)

bash perl command-line

2
推荐指数
1
解决办法
144
查看次数

标签 统计

perl ×2

bash ×1

command-line ×1

generics ×1

keyword ×1

rust ×1